A bread journaling application where users can document their bread baking experiences, upload images, and share their creations with the community.
- React with TypeScript
- Vite for build tooling
- TailwindCSS for styling
- React Router for navigation
- TanStack Query for data fetching
- Axios for API calls
- FastAPI with Python
- SQLAlchemy for ORM
- Alembic for database migrations
- Google OAuth for authentication
- AWS Lambda via Mangum for serverless deployment
- PostgreSQL on RDS for database
- S3 for image storage
- CloudFront for CDN
- Terraform for Infrastructure as Code
- AWS VPC with public/private subnets
- AWS Lambda behind API Gateway
- RDS PostgreSQL in private subnets
- S3 + CloudFront for static assets and images
- GitHub Actions for CI/CD
- Python 3.11+
- Node.js 20+
- uv (Python package manager)
- PostgreSQL (for local development)
-
Navigate to the API directory:
cd api -
Copy environment file:
cp .env.example .env
-
Update
.envwith your configuration:- Database URL
- Google OAuth credentials
- AWS credentials (for S3)
- Secret key
-
Install dependencies:
uv sync
-
Run database migrations:
uv run alembic upgrade head
-
Start the development server:
uv run python main.py
The API will be available at http://localhost:8000
-
Navigate to the web directory:
cd web -
Copy environment file:
cp .env.example .env.local
-
Install dependencies:
npm install
-
Start the development server:
npm run dev
The frontend will be available at http://localhost:3000
The easiest way to run BreadNotes locally is using Docker:
# Start the development environment
make devThis will start:
- PostgreSQL database
- FastAPI backend
- React frontend
See DOCKER_README.md for detailed Docker setup instructions.
For production deployment, use the Terraform infrastructure and GitHub Actions workflow:
- Infrastructure: Use Terraform to deploy AWS resources (see
terraform/directory) - Application: Use GitHub Actions workflow for automated deployment
- Configuration: Set up required secrets and environment variables
- User Authentication: Google OAuth integration
- Bread Entries: Create, view, edit, and delete bread baking entries
- Image Upload: Upload and display bread photos via S3
- Community Feed: View recent entries from all users
- Personal Dashboard: Manage your own bread entries
- Responsive Design: Works on desktop and mobile devices
GET /api/auth/login- Initiate Google OAuth loginGET /api/auth/callback- OAuth callback handlerGET /api/auth/logout- Logout userGET /api/auth/me- Get current user info
GET /api/bread-entries/- Get user's bread entriesPOST /api/bread-entries/- Create new bread entryGET /api/bread-entries/recent- Get recent entries from all usersGET /api/bread-entries/{id}- Get specific bread entryPUT /api/bread-entries/{id}- Update bread entryDELETE /api/bread-entries/{id}- Delete bread entry
GET /api/health- API health check
id(UUID, Primary Key)email(String, Unique)name(String)google_id(String, Unique)profile_picture(String, Optional)created_at(DateTime)updated_at(DateTime)
id(UUID, Primary Key)title(String)notes(Text, Optional)image_url(String, Optional)user_id(UUID, Foreign Key)created_at(DateTime)updated_at(DateTime)
- All API endpoints require authentication (except public feed and health check)
- CORS configured for frontend domain
- CSRF protection enabled
- Session-based authentication
- Secure S3 bucket policies
- VPC isolation for database and Lambda functions
- Encrypted storage for RDS and S3
MIT License - see LICENSE file for details