A full-stack web application for tracking and managing portfolio companies. Built to demonstrate end-to-end development capabilities with modern technologies.
- Next.js 14 (App Router)
- React 18 with TypeScript
- Tailwind CSS for styling
- Recharts for data visualization
- Axios for API communication
- ASP.NET Core 10 Web API
- Entity Framework Core with PostgreSQL
- JWT Authentication
- BCrypt for password hashing
- PostgreSQL
- Authentication: Secure user registration and login with JWT tokens
- Dashboard: Portfolio overview with key metrics and interactive charts
- Company Management: CRUD operations for portfolio companies
- Metrics Tracking: Track revenue, employees, customers, and churn over time
- Role-Based Access: Admin and Viewer roles with appropriate permissions
- Responsive Design: Works on desktop and mobile devices
portfolio-dashboard/
├── backend/ # ASP.NET Core API
│ ├── Controllers/ # API endpoints
│ ├── Data/ # DbContext and migrations
│ ├── DTOs/ # Data transfer objects
│ ├── Models/ # Entity models
│ ├── Services/ # Business logic
│ └── Program.cs # Application entry point
│
├── frontend/ # Next.js application
│ └── src/
│ ├── app/ # Pages (App Router)
│ ├── components/ # Reusable UI components
│ ├── contexts/ # React contexts (Auth)
│ ├── lib/ # API client
│ └── types/ # TypeScript types
│
└── README.md
- Install PostgreSQL and create a database:
CREATE DATABASE portfolio_dashboard;- Update the connection string in
backend/appsettings.json:
{
"ConnectionStrings": {
"DefaultConnection": "Host=localhost;Database=portfolio_dashboard;Username=your_user;Password=your_password"
}
}cd backend
# Restore packages
dotnet restore
# Apply migrations
dotnet ef database update
# Run the API
dotnet runThe API will be available at http://localhost:5000
cd frontend
# Install dependencies
npm install
# Create environment file
cp .env.example .env.local
# Run the development server
npm run devThe frontend will be available at http://localhost:3000
| Method | Endpoint | Description | Auth |
|---|---|---|---|
| POST | /api/auth/register |
Register new user | No |
| POST | /api/auth/login |
Login | No |
| GET | /api/companies |
List all companies | Yes |
| POST | /api/companies |
Create company | Admin |
| GET | /api/companies/{id} |
Get company details | Yes |
| PUT | /api/companies/{id} |
Update company | Admin |
| DELETE | /api/companies/{id} |
Delete company | Admin |
| GET | /api/companies/{id}/metrics |
Get company metrics | Yes |
| POST | /api/companies/{id}/metrics |
Add metric | Admin |
| GET | /api/dashboard/summary |
Get dashboard summary | Yes |
- Push code to GitHub
- Connect repository to Vercel
- Set environment variable:
NEXT_PUBLIC_API_URL - Deploy
- Push code to GitHub
- Create new project on Railway
- Add PostgreSQL plugin
- Set environment variables from Railway's PostgreSQL
- Deploy
Portfolio overview with key metrics and interactive charts showing revenue trends and industry breakdown.
View all portfolio companies with latest revenue and employee counts.
Individual company view with performance metrics over time.
Secure authentication with JWT tokens.
MIT



