LoveSync is a modern web application (React) that helps couples plan dates, share memories, and celebrate milestones. It includes a Next.js frontend with Tailwind CSS and shadcn/ui styling, and a Convex backend for real-time data storage and server functions.
- Plan and track date ideas with categories, budgets, and scheduling
- Maintain a shared relationship diary with images and moods
- Onboarding flow with user profiles and relationship linking
- PWA-ready service worker and manifest setup
- Next.js 15 (App Router) —
backend/ - React — Frontend
- Tailwind CSS + shadcn/ui — UI components and styles
- Convex — serverless backend for data, auth, and functions —
convex/ - TypeScript — strict typing and linting
.
├─ backend/ # Next.js app (App Router, API routes)
│ ├─ app/ # App routes, layout, providers, SW registrar
│ ├─ public/ # Static assets (manifest.json, service-worker.js)
│ ├─ src/ # React components & entry points
│ ├─ tailwind.config.cjs # Tailwind configuration (single source of truth)
│ └─ tsconfig.json # TypeScript config for Next.js
├─ convex/ # Convex schema & functions
│ ├─ schema.ts # Data model definitions
│ ├─ auth.ts # Auth setup using @convex-dev/auth
│ ├─ *.ts # Domain functions (dates, diary, users, etc.)
│ └─ _generated/ # Auto-generated Convex types (ignored in git)
├─ scripts/ # Utility scripts (e.g., VAPID key generation)
├─ .gitignore
├─ eslint.config.js # Flat ESLint config (includes Next config)
├─ package.json
└─ README.md
- Install dependencies
npm install- Environment variables
- Copy or create
backend/.env.localwith the following (example):
NEXT_PUBLIC_CONVEX_URL="<your_convex_deployment_url>"
- Additional variables may be required depending on your deployment/auth setup.
- Development
npm run dev
# App will be served from: http://localhost:4000- Production build
npm run build
npm start- ESLint (with Next.js rules) is configured via
eslint.config.js - Type checking is enforced during builds
backend/app/layout.tsxreferences icons under/pwa/- Ensure
backend/public/pwa/contains the appropriate icon sizes to avoid 404s
- Authentication is set up through
@convex-dev/authinconvex/auth.ts - Providers configuration is managed in
convex/auth.config.ts
- Use feature branches and conventional commit messages (e.g.,
feat:,fix:,chore:) - Run
npm run buildbefore pushing to ensure type and lint checks pass
This project is licensed under the Apache-2.0 License.