A web app to manage your fragrance collection and usage.
| Layer | Technology |
|---|---|
| Framework | Next.js |
| Database | Convex |
| Runtime & Package Manager | Bun |
| Auth | Convex Auth |
Make sure you have the following installed before setting up the project:
- Bun >= 1.0 — used as the package manager and runtime
- Node.js >= 20 — required by some Next.js internals
1. Clone the repository
git clone https://github.com/your-username/fragrances-tracker.git
cd fragrances-tracker2. Install dependencies
cd my-app
bun install3. Start the development server
bun devBefore using Google sign-in, configure Convex Auth for your deployment:
SITE_URLJWT_PRIVATE_KEYJWKSAUTH_GOOGLE_IDAUTH_GOOGLE_SECRET
Then register your Google OAuth redirect URI as:
https://<your-convex-deployment>.convex.site/api/auth/callback/google
Open http://localhost:3000 in your browser to view the app.
Vitest covers the code that exists currently in my-app/.
Run tests from inside my-app/:
bun run test
bun run test:runThe current suite includes:
convex/bottles.test.tsfor bottle CRUD, validation, ownership checks, and cascade delete behaviorconvex/wearLogs.test.tsfor wear-log CRUD, validation, ownership checks, and aggregationsrc/lib/bottle-collection-sort.test.tsfor collection sorting and filtering
The test harness is wired through my-app/vitest.config.mts and my-app/convex/test.setup.ts:
- Vitest runs in the
edge-runtimeenvironment - Convex modules are loaded through
convex-test - rate-limiter test registration is set up in the shared test bootstrap
e2e / Playwright: WIP.
All scripts should be run from inside the my-app/ directory.
| Script | Description |
|---|---|
bun dev |
Starts the local development server |
bun run convex |
Starts the local Convex dev process |
bun run test |
Runs Vitest in watch mode |
bun run test:run |
Runs the Vitest suite once |
bun run build |
Creates an optimized production build |
bun run start |
Runs the production build locally |
bun run lint |
Runs ESLint across the project |
This project is licensed under the MIT License.