A free, lightweight home maintenance tracker.
Tracks routine maintenance for three home systems:
- HVAC — filter changes, tune-ups, ductwork, CO detectors
- Water Heater — T&P valve tests, sediment flushes, anode rods
- Pool — water chemistry, filter cleaning, shock schedules
Ships with pre-loaded maintenance schedules based on industry standards. Users can add custom tasks too.
| Layer | Tech |
|---|---|
| Framework | Next.js 14 (App Router) |
| Database | Neon Postgres (free tier) |
| Auth | JWT (jose) via httpOnly cookies |
| Styling | Tailwind CSS |
| Hosting | Vercel |
git clone https://github.com/rldonnell/home-cmms.git
cd home-cmms
npm install- Go to neon.tech or create via Vercel Storage
- Create a new project/database
- Copy the connection string
cp .env.example .env.local
# Edit .env.local with your Neon connection string and a JWT secretnode lib/db-setup.mjs
node lib/db-seed.mjsnpm run devvercel
# Or push to GitHub and connect via Vercel dashboardMake sure to add the same env vars (DATABASE_URL, JWT_SECRET) in Vercel → Settings → Environment Variables.
- User signs up with name, email, and optional company
- Account is created instantly — no email verification needed
- Default equipment and maintenance tasks are auto-created for all 3 categories
- User sees a dashboard with overdue/upcoming tasks
- Clicking a category shows all tasks with filters (overdue, due soon, upcoming)
- Marking a task "Done" logs the completion and schedules the next occurrence
- Users can add custom maintenance tasks per category
- Simple, focused dashboard - no upsells
Every signup captures:
- First name, last name
- Email address
- Company (optional)
This data lives in the users table in Neon Postgres. You can query it directly or build an admin page / export to your CRM.
home-cmms/
├── app/
│ ├── api/
│ │ ├── auth/ # signup, login, logout, me
│ │ ├── dashboard/ # summary stats endpoint
│ │ └── tasks/ # CRUD + complete
│ ├── dashboard/
│ │ ├── [category]/ # HVAC, Water Heater, Pool views
│ │ ├── layout.js # Sidebar + auth check
│ │ └── page.js # Main dashboard
│ ├── globals.css
│ ├── layout.js
│ └── page.js # Landing page + signup form
├── lib/
│ ├── auth.js # JWT helpers
│ ├── db.js # Neon connection
│ ├── db-setup.mjs # Create tables
│ ├── db-seed.mjs # Seed categories + templates
│ └── seed-data.js # Template definitions
├── middleware.js # Protects /dashboard routes
├── vercel.json
└── package.json