My personal portfolio website built with Rust, Leptos, and SQLite.
- Backend: Rust with Leptos (SSR)
- Database: SQLite
- Database Concurrency: The application uses embedded SQLite in WAL mode with a small connection pool (
max_connections(5)). SQLite only allows one concurrent writer. Concurrent write bursts will queue (up to a 5s busy timeout) and could fail under heavy write load. This is acceptable for a personal blog/portfolio, but must be accounted for if write traffic scales. - Reverse Proxy Setup: When deploying behind a reverse proxy (such as Nginx), you MUST configure the
TRUSTED_PROXY_IPSenvironment variable with the proxy's IP address. If left unset, all client requests will appear to come from the proxy's IP, effectively disabling per-client rate limiting and causing all users to share the same rate limit bucket.
direnv allow # Load development environment
./scripts/setup-dev.sh # Setup database
cargo leptos watch # Start dev serverSee docs/LOCAL_DEV.md for detailed setup.
cargo install cargo-leptos
./scripts/setup-dev.sh
cargo leptos watchbackend/- Server-side Rust codefrontend/- Client-side Leptos componentsshared/- Shared types and utilitiesflake.nix- Nix development environment.envrc- direnv configuration
- HTTPS/SSL - Let's Encrypt certificates
- Authentication - Password-protected admin panel
- Theme - Modern indigo design
- Admin features - Post creation
- Media library - Photo/video management
- Password hashing - Argon2 implementation
- Password reset - Email-based recovery