A comprehensive full-stack investment tracking platform for modern investors. Sync all your investments in one intelligent dashboard.
Clean, modern dashboard showing portfolio overview with real-time values and performance metrics
Advanced stock tracking with smart price caching, P&L calculations, and manual refresh controls
- Portfolio Management: Create and manage multiple investment portfolios
- Multi-Asset Support: Track stocks, ETFs, and real estate properties
- Real-time Price Updates: Automatic price updates for financial instruments
- Performance Analytics: Detailed charts and performance metrics
- Responsive Design: Modern UI that works on desktop and mobile
- Static React application hosted on S3
- CloudFront CDN for global distribution
- TypeScript for type safety
- Tailwind CSS for styling
- Recharts for data visualization
- React Query for state management
- Serverless functions via AWS Lambda
- API Gateway for HTTP endpoints
- DynamoDB for data storage
- Scheduled price updates via EventBridge
- RESTful API design
investment-tracker/
├── README.md
├── .env.example
├── docker-compose.yml
├── frontend/ # Next.js frontend
│ ├── src/
│ │ ├── components/ # React components
│ │ │ ├── dashboard/ # Dashboard components
│ │ │ ├── charts/ # Chart components
│ │ │ ├── tables/ # Table components
│ │ │ └── ui/ # UI components
│ │ ├── pages/ # Next.js pages
│ │ ├── hooks/ # Custom React hooks
│ │ ├── services/ # API services
│ │ ├── utils/ # Utility functions
│ │ └── types/ # TypeScript types
│ ├── public/ # Static assets
│ ├── package.json
│ ├── next.config.js
│ └── .env.example
├── backend/ # AWS Lambda backend
│ ├── functions/ # Lambda functions
│ │ ├── portfolio/ # Portfolio CRUD operations
│ │ ├── properties/ # Property management
│ │ ├── stocks/ # Stock management
│ │ ├── etfs/ # ETF management
│ │ └── prices/ # Price update functions
│ ├── shared/ # Shared utilities
│ │ ├── database/ # Database connections
│ │ ├── services/ # Business logic
│ │ └── utils/ # Helper functions
│ ├── serverless.yml # Serverless configuration
│ ├── package.json
│ └── .env.example
└── scripts/ # Setup and deployment scripts
├── setup.sh
└── deploy.sh
- Node.js 18+
- npm or yarn
- AWS CLI configured with appropriate permissions
- Serverless Framework
-
Clone and setup the project:
git clone <repository-url> cd investment-tracker ./scripts/setup.sh
-
Configure AWS credentials:
aws configure
-
Get API keys:
- Alpha Vantage: https://www.alphavantage.co/support/#api-key
- Finnhub: https://finnhub.io/register
- Update the
.envfiles with your API keys
-
Deploy to AWS:
./scripts/deploy.sh
-
For local development:
# Terminal 1 - Backend cd backend npm run offline # Terminal 2 - Frontend cd frontend npm run dev
- Production: Your CloudFront URL (displayed after deployment)
- Local Frontend: http://localhost:3000
- Local Backend API: http://localhost:3001
The application uses a fully serverless AWS architecture:
- S3: Static website hosting for the frontend
- CloudFront: CDN for global content delivery
- API Gateway: HTTP API endpoints
- Lambda: Serverless compute for business logic
- DynamoDB: NoSQL database for data storage
- EventBridge: Scheduled price updates
# Deploy everything at once
./scripts/deploy.shThis script will:
- Deploy backend infrastructure (Lambda, API Gateway, DynamoDB)
- Create S3 bucket and CloudFront distribution
- Build and deploy the frontend
- Configure all necessary permissions and policies
# Backend only
cd backend
serverless deploy
# Frontend only (after backend is deployed)
cd frontend
npm run build
npm run deployGET /portfolios- List all portfoliosGET /portfolios/{id}- Get portfolio detailsPOST /portfolios- Create new portfolioPUT /portfolios/{id}- Update portfolioDELETE /portfolios/{id}- Delete portfolio
GET /portfolios/{portfolioId}/stocks- List stocks in portfolioPOST /portfolios/{portfolioId}/stocks- Add stock to portfolioPUT /stocks/{id}- Update stockDELETE /stocks/{id}- Remove stock
GET /portfolios/{portfolioId}/etfs- List ETFs in portfolioPOST /portfolios/{portfolioId}/etfs- Add ETF to portfolioPUT /etfs/{id}- Update ETFDELETE /etfs/{id}- Remove ETF
GET /portfolios/{portfolioId}/properties- List properties in portfolioPOST /portfolios/{portfolioId}/properties- Add property to portfolioPUT /properties/{id}- Update propertyDELETE /properties/{id}- Remove property
GET /prices/{symbol}/history- Get price history for symbol
cd frontend
npm run dev # Start development server
npm run build # Build for production
npm run lint # Run ESLint
npm run type-check # TypeScript type checkingcd backend
npm run offline # Start serverless offline
npm run deploy # Deploy to AWS
npm run remove # Remove from AWS
npm test # Run tests
npm run lint # Run ESLint- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
- Features - Complete feature list and capabilities
- Roadmap - Product roadmap and feature backlog
- Brand Guidelines - Brand identity and SaaS positioning
- Cost Optimization - AWS cost monitoring and optimization
- GitHub Issues - Feature backlog and bug tracking
- GitHub Projects - Development progress and milestones
This project is licensed under the MIT License.