A full-stack web application for building aquarium setups with compatibility checking, inspired by PCPartPicker.
- π Browse aquarium parts by category (Tanks, Filters, Heaters, Lights, Substrate, Decor)
- π Browse livestock (Fish, Shrimp) with quantity selection
- β Real-time compatibility checking (rule-based)
- π° Price calculation for your build
- π Buy links integration with Buce Plant
- π§ Admin panel to add products
- π Crowdsourced submissions with admin moderation
- πΎ File-based persistence for parts/livestock/submissions
- π¨ Modern, responsive UI built with Tailwind CSS
- β‘ Built with Next.js 14, TypeScript, and React
- Framework: Next.js 14 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Runtime: Node.js
- Install dependencies:
npm install- Set up environment variables:
-
Create a
.env.localfile in the project root -
Add your API keys:
# Database (Postgres) DATABASE_URL=postgresql://... # Amazon Product Advertising API (optional) AWS_ACCESS_KEY_ID=your_aws_access_key_id AWS_SECRET_ACCESS_KEY=your_aws_secret_access_key AWS_ASSOCIATE_TAG=your_associate_tag AWS_REGION=us-east-1 # Admin auth (required for admin access) ADMIN_PASSWORD=your_admin_password_here
-
Amazon PA-API: Follow these steps to get credentials:
- Sign up for Amazon Associates and get approved
- Apply for PA-API access
- Once approved, go to your Associates account β Tools β Product Advertising API
- Create access keys (Access Key ID and Secret Access Key)
- Your Associate Tag is your Associates ID (found in your Associates account)
- Fill in the credentials in
.env.local
-
- Install dependencies:
npm install- Generate Prisma client:
npx prisma generate- Create tables:
npx prisma migrate dev --name init- Run the development server:
npm run dev- Open http://localhost:3000 in your browser.
βββ app/
β βββ api/ # API routes
β βββ admin/ # Admin settings + moderation queue
β βββ globals.css # Global styles
β βββ layout.tsx # Root layout
β βββ page.tsx # Home page
βββ components/ # React components + modals
βββ lib/
β βββ business/ # Business logic (services)
β βββ data/ # Repositories + persistence
β βββ models/ # Domain models
β βββ utils/ # Utilities
βββ middleware.ts # Security headers (CSP, etc.)
βββ package.json
- Data is persisted to
data/*.json(local dev). These files are ignored by git. - Rate limiting is in-memory and resets on server restart.
The app checks for:
- Filter flow rate (should be 4-6x tank volume per hour)
- Heater wattage (should be ~5 watts per gallon)
- Tank size compatibility with filters and heaters
- Required components (tank and filter are required)
- Save builds to database
- User accounts and saved builds
- More parts and categories
- Price comparison from multiple retailers
- Advanced filtering and search
- Product images
- Reviews and ratings