A modern donation platform for Yayasan Peduli Ilmu, designed to support multilingual communities, simplify fundraising, and ensure transparency for educational initiatives.
npm install # Install dependencies
npm dev # Start development server
npm build # Production build
npm start # Start production server
npm test # Run unit/integration tests
npm format # Format codebase with Prettier
Make sure to create .env.example
into .env
and update your Supabase keys.
- Framework: Next.js 15
- Language: TypeScript
- UI/UX: Tailwind CSS, Headless UI, Lucide Icons
- i18n: next-intl v4
- Backend: Supabase
- Testing: Jest, Testing Library
- Linting/Formatting: ESLint, Prettier, Husky (with commitlint)
We maintain internal documentation in the /docs
folder:
next-intl.md
— How to usenext-intl
across routes and componentssupabase.md
— Supabase schemas, auth rules, and storage usagehelpers.md
- globally reusable utility functions and custom hooks
Docs help onboard future devs and maintain consistency across the team.
npm run test # Run all tests once
npm run test:watch # Watch mode
We use:
- Jest: Test runner
- @testing-library/react: Component + DOM testing
- Mocking: For next-intl, Supabase, router, etc.
Tests are colocated next to their source files as *.test.tsx
.
# .env.example
NEXT_PUBLIC_SUPABASE_URL=https://<your-project>.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
Use
.env.local
for development and keep your secrets safe.
We follow Conventional Commits for consistent changelogs and CI/CD pipelines.
Example:
feat(donation): redesign donation card layout and improve logic
fix(timeline): correct date formatting issue in program timeline
Setup: Husky + Commitlint
- Use feature folders and follow component separation
- Write tests for logic-heavy components or hooks
- Update
/docs
if adding/removing architecture-related decisions
MIT License © Yayasan Peduli Ilmu 2025
Built with ❤️ by a small team of dedicated volunteers. Contributions and feedback welcome!