Academic Attendance Decision Support System
Acadence is a modern, production-grade web application designed to track student daily attendance, manage semester configurations, and provide comprehensive data-driven insights. Built with Next.js 15 (App Router), Tailwind CSS v4, and Supabase, it provides a highly reliable system to orchestrate scalable academic processes.
- Role-Based Access Control: Secure authentication and authorization flows managed entirely by Supabase Auth with server-side enforcement.
- Attendance Tracking & Simulation: Intuitive interfaces for daily attendance logs, complete with the ability to simulate and process complex attendance scenarios.
- Semester Organization: Configure academic programs, subjects, sections, and credit structures per semester and per session.
- Rich Analytical Dashboards: Access detailed calendar visualizations and robust statistical reports for informed operational and academic decisions.
- Interactive Rich Text Support: Integrated TipTap editor designed for seamless rich text interactions, document handling, and module configurations.
- Premium UI Experience: Designed with
shadcn/uicomponents and Tailwind CSS 4 to guarantee a responsive, highly polished, and fully accessible dark/light mode experience.
- Framework: Next.js 15 (App Router, Server Actions)
- Library: React 19
- Styling: Tailwind CSS v4, clsx, tailwind-merge
- UI Components: shadcn/ui paired with Radix UI primitives
- Database & Auth: Supabase (
@supabase/ssr,@supabase/supabase-js) - Icons & Typography: Lucide React
- Rich Text: TipTap
acadence/
├── app/ # Next.js App Router (pages, layouts, globals)
│ ├── admin/ # Administrative dashboard and user management routes
│ ├── daily-attendance/ # Core feature for marking attendance
│ ├── login/ & register/# Authentication routes
│ ├── semester-*/ # Semester statistics and configurations workflows
│ └── simulate/ # Attendance simulations/testing utilities
├── components/ # Reusable UI architecture
│ ├── admin/ # Admin-specific user interface elements
│ ├── common/ # Sitewide shared components (navbars, footers, etc.)
│ └── ui/ # Base UI primitives generated by shadcn/ui
├── lib/ # Application business logic, utils, and Supabase integrations
├── server/ # Server-side specific operations (e.g. auth actions)
├── db/ # Raw SQL schema definition (Supabase schema.sql) and seed scripts
└── supabase/ # Local Supabase configurations
- Node.js
v20.xor higher - npm, pnpm, or yarn
- A Supabase Project (Local or Cloud)
git clone https://github.com/your-username/acadence.git
cd acadencenpm install
# or
yarn install
# or
pnpm installCreate a .env.local file in the root directory and add your Supabase credentials:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_keyEnsure your Supabase project contains the requisite schema. You can execute the definitions within db/supabase-schema.sql via the Supabase SQL editor or by using the Supabase CLI:
supabase db push
# or run the SQL commands manually from db/supabase-schema.sqlnpm run devOpen http://localhost:3000 using your browser to see the outcome.
If you are running the project on a different OS (like Windows or Mac) and encounter setup issues (Node.js version mismatch, system dependencies, or local environment differences), you can run the entire project in an isolated Linux container using Docker.
Make sure you have Docker Desktop installed and running on your system.
Ensure your .env.local file is set up correctly in the root folder (just like the standard configuration).
To build the image and start the application in one command:
docker compose up --buildOpen http://localhost:3000 in your browser.
Note for Windows users: Hot module reloading (HMR) is supported inside the container via file polling.
npm run dev- Starts the development server with Hot Module Replacement.npm run build- Creates an optimized production build.npm run start- Starts the application in production mode.npm run lint- Lints the codebase using ESLint.
This project is proprietary. All rights reserved. Let the repository owner know if you'd like to use portions of this codebase for reference.