4.6 KiB
4.6 KiB
Technology Stack
Analysis Date: 2026-03-11
Languages
Primary:
- Go 1.25.0 - Backend REST API, SPA server, database migrations
- TypeScript 5.9.3 - Frontend React application, type-safe client code
- SQL - Database schema and migrations (PostgreSQL)
Secondary:
- HTML/CSS - Frontend markup and styling (via React/Tailwind)
- JavaScript - Runtime for frontend (via TypeScript compilation)
Runtime
Environment:
- Go 1.25.0 - Backend runtime (production: Alpine-based Docker)
- Node.js 19+ (implied via Bun) - Frontend build only
- Bun 1.x - JavaScript package manager and runtime
Package Manager:
- Bun - JavaScript/TypeScript package manager
- Lockfile:
frontend/bun.lock(present)
- Lockfile:
- Go modules - Go dependency management
- Lockfile:
backend/go.mod,backend/go.sum(present)
- Lockfile:
Frameworks
Core:
- React 19.2.0 - Frontend UI framework
- Chi v5.2.5 - Go HTTP router with middleware support
- Vite 7.3.1 - Frontend build tool and dev server
UI/Styling:
- Tailwind CSS 4.2.1 - Utility-first CSS framework with Vite plugin
- shadcn/ui 4.0.0 - Component library built on Radix UI
- Radix UI 1.4.3 - Headless UI component primitives
Charting/Data Visualization:
- Recharts 2.15.4 - React charting library for budget visualization
Internationalization:
- i18next 25.8.14 - Frontend i18n framework
- react-i18next 16.5.6 - React bindings for i18next
Routing:
- React Router DOM 7.13.1 - Frontend client-side routing
Key Dependencies
Critical:
- jackc/pgx/v5 v5.8.0 - PostgreSQL driver and connection pooling (pgxpool)
- golang-jwt/jwt/v5 v5.3.1 - JWT token generation and validation for session auth
- golang.org/x/crypto v0.48.0 - bcrypt password hashing
Infrastructure:
- chi/v5 v5.2.5 - HTTP router with CORS and compression middleware
- chi/cors v1.2.2 - CORS middleware for Go
- google/uuid v1.6.0 - UUID generation for database IDs
- shopspring/decimal v1.4.0 - Precise decimal arithmetic for currency amounts
- tailwindcss/vite v4.2.1 - Tailwind CSS Vite integration
Frontend Utilities:
- clsx 2.1.1 - Conditional className utility
- tailwind-merge 3.5.0 - Merge and deduplicate Tailwind CSS classes
- class-variance-authority 0.7.1 - Type-safe component variant system
- lucide-react 0.577.0 - Icon library for React
- @fontsource-variable/geist 5.2.8 - Geist variable font
Dev Tools:
- TypeScript ESLint 8.48.0 - Linting for TypeScript/JavaScript
- ESLint 9.39.1 - Base linting framework
- @vitejs/plugin-react 5.1.1 - Vite plugin for React (JSX/Fast Refresh)
Configuration
Environment:
- Configuration via environment variables:
DATABASE_URL- PostgreSQL connection string (default:postgres://simplefin:simplefin@localhost:5432/simplefindb?sslmode=disable)SESSION_SECRET- Secret for JWT signing (default:change-me-in-production)PORT- Server port (default:8080)OIDC_ISSUER- OIDC provider issuer URL (optional)OIDC_CLIENT_ID- OIDC client identifier (optional)OIDC_CLIENT_SECRET- OIDC client secret (optional)
- Env file: Not detected - uses environment variables at runtime
Build:
- Frontend:
frontend/vite.config.ts- Vite configuration with React and Tailwind plugins - Frontend:
frontend/tsconfig.app.json- TypeScript compiler options (ES2022, strict mode) - Frontend:
frontend/tsconfig.node.json- TypeScript config for build tools - Frontend:
frontend/eslint.config.js- ESLint configuration - Frontend:
frontend/components.json- shadcn/ui component configuration - Backend: Multi-stage Docker build via
Dockerfile(Bun frontend → Go backend → Alpine)
Platform Requirements
Development:
- Docker and Docker Compose (for local PostgreSQL)
- Go 1.25.0+
- Bun or Node.js 19+ (frontend)
- PostgreSQL 16 compatible (for
docker compose up db)
Production:
- Alpine Linux (via Docker image from
Dockerfile) - PostgreSQL 16 (external database)
- Single Docker image deployment: embeds frontend build and migrations
Deployment
Build Strategy:
- Multi-stage Docker build (file:
Dockerfile):- Stage 1 (Bun): Build frontend React app →
frontend/dist - Stage 2 (Go): Download Go dependencies, embed frontend dist and migrations, compile binary
- Stage 3 (Alpine): Minimal runtime image with single
/serverbinary
- Stage 1 (Bun): Build frontend React app →
- Binary embeds:
- Frontend static files via
embed.FSatcmd/server/frontend_dist/ - SQL migrations via
embed.FSatcmd/server/migrations/
- Frontend static files via
Compose Configuration:
- File:
compose.yml - Services:
app: Built from Dockerfile, exposes port 8080db: PostgreSQL 16 Alpine, exposes port 5432, volume:pgdata
- Health checks: PostgreSQL readiness check before app startup
Stack analysis: 2026-03-11