An Islamic personal hub for spiritual tracking, Ramadan planning, and self-accountability.
muhasabah/
βββ src/ # Frontend source (React + Vite)
β βββ api/ # API client functions
β βββ assets/ # Static assets
β βββ components/ # Reusable UI components
β βββ context/ # React context providers
β βββ pages/ # Page components
β βββ App.jsx
β βββ main.jsx
β βββ index.css
β βββ translations.js
βββ public/ # Static public files
βββ server/ # Backend source (Node.js + Express + TypeScript)
β βββ src/
β β βββ auth/ # JWT & auth helpers
β β βββ config/ # App configuration
β β βββ data/ # Static Ramadan content
β β βββ db/ # Database connection & init
β β βββ routes/ # Express route handlers
β β βββ types/ # TypeScript type declarations
β β βββ app.ts # Express app setup
β β βββ server.ts # Vercel serverless export
β β βββ dev.ts # Local dev server entry
β βββ api/
β β βββ index.ts # Vercel serverless entry
β βββ package.json
β βββ tsconfig.json
β βββ vercel.json
βββ index.html
βββ package.json # Frontend dependencies
βββ vite.config.js
βββ tailwind.config.js
βββ postcss.config.js
βββ eslint.config.js
βββ .env.example
βββ .gitignore
# Install dependencies
npm install
# Start dev server (proxies /api to backend)
npm run dev
# Build for production
npm run buildcd server
# Install dependencies
npm install
# Copy env file and fill in values
cp .env.example .env
# Start dev server
npm run devVITE_API_URL=http://localhost:3000
VITE_GOOGLE_CLIENT_ID=your-google-client-id
DATABASE_URL=postgresql://...
SECRET_KEY=your-secret-key
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
PORT=3000
NODE_ENV=development
Frontend: React 19, Vite, Tailwind CSS v4, React Router, Axios
Backend: Node.js, Express, TypeScript, PostgreSQL (Neon), JWT, Better Auth
Deployment: Vercel (both frontend and backend)