Track your consistency. Grow your legacy.
Evergreeners is a developer-focused habit and contribution tracking application — a digital garden where consistency compounds over time. It helps users visualize daily activity, maintain streaks, and build a lasting record of effort.
- GitHub-style Contribution Graph: Visualize daily activity using a familiar heatmap.
- Streak Tracking: Track active streaks and maintain momentum over time.
- Dark Mode First: Developer-friendly dark UI powered by Tailwind CSS and
lucide-react. - Authentication: Secure email/password authentication using Better Auth (backend-only).
- Responsive Design: Optimized for desktop and mobile devices.
- Backend API: A Fastify server handling authentication, business logic, and data persistence with Drizzle ORM and PostgreSQL.
Browser (React)
↓
Fastify API (Backend)
↓
Better Auth (Sessions & Users)
↓
Drizzle ORM
↓
PostgreSQL (Supabase)
Note
Supabase is used strictly as a managed PostgreSQL database. All authentication and application logic live in the Fastify backend.
- Framework: React + Vite
- Styling: Tailwind CSS
- UI Components: shadcn/ui
- Icons: Lucide React
- State Management: React Hooks & Context
- Server: Fastify
- Database: PostgreSQL (Supabase)
- ORM: Drizzle ORM
- Authentication: Better Auth
- Node.js v18+
- A Supabase project (PostgreSQL)
- Git
git clone [https://github.com/evergreeners/Evergreeners-web.git](https://github.com/evergreeners/Evergreeners-web.git)
cd evergreeners
npm install
npm run dev
The frontend will run on http://localhost:5173.
cd server
npm install
Create a .env file inside the server directory:
PORT=3000
# PostgreSQL connection (Supabase)
DATABASE_URL="postgresql://app_user:YOUR_PASSWORD@YOUR_HOST:5432/postgres?sslmode=require"
# Better Auth
BETTER_AUTH_SECRET="your-secure-random-string"
BETTER_AUTH_URL="http://localhost:3000"
Important
Security Notes:
- Do NOT use the Supabase postgres admin user in production.
- Create a dedicated database role (e.g.
app_user) with limited privileges. - Never commit
.envfiles to version control.
npm run db:generate
npm run db:migrate
npm run dev
The backend will run on http://localhost:3000.
evergreeners/
├── src/ # Frontend React code
│ ├── components/ # Reusable UI components
│ ├── pages/ # App pages (Landing, Auth, Dashboard)
│ ├── lib/ # Utilities (auth client, helpers)
│ └── App.tsx
│
├── server/ # Backend (Fastify)
│ ├── src/
│ │ ├── db/ # Drizzle schema & DB connection
│ │ ├── auth.ts # Better Auth configuration
│ │ └── index.ts # Server entry point
│ └── drizzle/ # Migration files
│
└── README.md
- Frontend: Vercel
- Backend: Railway, Fly.io, or Render
- Database: Supabase (PostgreSQL)
Ensure production environment variables match your local .env configuration.
- Fork the repository.
- Create a feature branch:
git checkout -b feature/your-feature-name. - Commit your changes:
git commit -m "Add your feature". - Push to your branch:
git push origin feature/your-feature-name. - Open a Pull Request.
This project is open-source and licensed under the MIT License.
Evergreeners is about showing up every day — not perfection, but persistence. Small actions, done consistently, grow into something meaningful.
Grow steadily. Stay evergreen. 🌲
