A lightweight TypeScript admin platform with CRM, email campaigns, media management, and invoicing — powered by Express and Next.js.
- Kanban, Calendar, and Table views with 8-stage contact status workflow
- Notes & todos per contact with follow-up scheduling
- Bulk operations — multi-select delete for contacts
- IP duplicate detection with badge on repeated IPs
- Multi-recipient compose (To/CC/BCC) with contact picker and rich preview
- Campaigns — create, target by tags or all subscribers, track delivery
- Multi-provider support — AHASEND and Resend with runtime hot-swap
- Customizable HTML templates for contact and subscriber confirmation emails
- Full CRUD with PDF generation and download
- Line items, tax/discount, multi-currency, templates
- Multi-format upload — video, PDF, and images
- Server-side thumbnail generation (Sharp + ffmpeg + MuPDF)
- Flexible storage — local filesystem and AWS S3
- TypeScript monorepo — Turbo.js orchestration with pnpm workspaces and shared type/schema package
- Multi-database support — SQLite, (future PostgreSQL, MySQL with seamless switching)
- Dashboard charts — 30-day trend visualizations for contacts and subscribers (Recharts)
- Activity log — auditable admin action history with per-entry deletion
- Multi-site support — site API keys (
X-Site-Keyheader) to tag form submissions per site
- Smart rate limiting, CORS, JWT authentication, input validation, Helmet.js
- Geolocation — IP-based country/region enrichment on form submissions (MaxMind GeoLite2)
- Suspicious activity detection — automatic blocking of scanning attempts
- Integration tests — auth middleware, error handling, and validation middleware coverage
Requires: Node.js >= 20, pnpm >= 9. Docker is optional.
git clone https://github.com/AnimaDigitalSolutions/Lite-Admin.git
cd Lite-Admin
just install
cp /.env.example /.env
# Edit apps/backend/.env with your configuration
# Enter your AHASEND API KEY & USER ACCOUNT if available
just devOr with the interactive setup:
just quickstartIf you're looking for the default logins: admin@email.com / changeme ;)
Want to explore the dashboard without setting up a backend? Close the quickstart and Enable demo mode:
NEXT_PUBLIC_DEMO_MODE=true pnpm devOr seed real data into your database and start it up again afterwards:
pnpm db:seed| Layer | Technology |
|---|---|
| Language | TypeScript (strict) |
| Monorepo | Turbo.js + pnpm workspaces |
| Backend | Express.js |
| Frontend | Next.js 15 (App Router) |
| Database | SQLite (default) · PostgreSQL, MySQL planned |
| AHASEND (default) · Resend planned | |
| Storage | Local filesystem (default) · AWS S3 planned |
| Validation | Zod |
| Containerization | Docker + PM2 |
Defaults vs planned: SQLite, AHASEND, and local storage are the tested defaults shipped today. PostgreSQL, MySQL, Resend, and S3 adapters are implemented but untested. GeoIP city-level enrichment is stubbed out. Contributions welcome.
Access the dashboard at http://localhost:3002 after starting the dev server.
| Page | Route | Description |
|---|---|---|
| Dashboard | / |
30-day trend charts, at-a-glance stats |
| Contacts | /contacts |
CRM with Table, Kanban, Calendar views; status pipeline; notes |
| Compose | /compose |
Multi-recipient email with contact picker |
| Campaigns | /campaigns |
Create, target, and send email campaigns |
| Invoices | /invoices |
Create, preview, and download PDF invoices |
| Subscribers | /subscribers |
Audience management with tags and segmentation |
| Media Gallery | /media |
Upload and manage portfolio media with thumbnails |
| Statistics | /stats |
Bar charts and server memory breakdown |
| Settings | /settings |
Maintenance mode, email toggle, provider credentials |
pnpm dev # Both backend and admin
pnpm dev:backend # Backend only (port 3001)
pnpm dev:admin # Admin dashboard only (port 3002)
pnpm build # Production build
pnpm lint # Lint all packages
pnpm type-check # TypeScript check all packages
pnpm test # Run test suitejust # List all commands
just quickstart # Interactive setup
just dev # Start development servers
just status # Check service health
just test # Run tests
just validate # Lint + type-check
just docker-up # Start Docker stack
just docker-down # Stop Docker stack
just doctor # Environment diagnosticslite-admin/
├── apps/
│ ├── backend/ # Express.js API
│ │ └── src/
│ │ ├── routes/ # Auth, forms, media, admin/*
│ │ ├── services/ # Email, storage, geo, auth
│ │ ├── middleware/
│ │ └── schemas/ # Zod validation
│ └── admin/ # Next.js 15 dashboard
│ ├── app/ # App Router pages
│ ├── components/ # UI primitives, contact detail
│ └── lib/ # API client, auth, theme
├── packages/
│ └── shared/ # @lite/shared — types, schemas, utils
├── docker/
└── turbo.json
cd apps/backend
pm2 start ecosystem.config.jsdocker-compose -f docker/docker-compose.yml up -d # Development
docker-compose -f docker/docker-compose.prod.yml up -d # Production- Set strong
ADMIN_PASSWORDandJWT_SECRET - Configure production database (PostgreSQL recommended)
- Set up S3 for media storage
- Configure email provider API keys
- Update
ALLOWED_ORIGINSfor your domain - Set up SSL/TLS (caddy/traefil/nginx reverse proxy)
- Build and serve the admin dashboard (
pnpm build)
| Document | Description |
|---|---|
| API Reference | Full endpoint documentation for public and admin APIs |
| Configuration | Environment variables and runtime settings |
| Database Schema | Complete SQL schema for all tables |
MIT — see LICENSE for details.
We are open to PRs ☕
Open an issue on GitHub or contact us at animadigitalsolutions.com.
