{"id":31802032,"url":"https://github.com/claudiusayadi/aiki","last_synced_at":"2026-05-15T22:04:34.667Z","repository":{"id":318601042,"uuid":"1071006746","full_name":"claudiusayadi/aiki","owner":"claudiusayadi","description":"Aiki - A clean, modular NestJS API for task management and productivity, featuring user authentication, Paystack-ready billing, email verification, and flexible usage-based plans.","archived":false,"fork":false,"pushed_at":"2025-10-08T04:51:13.000Z","size":181,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-08T06:26:01.086Z","etag":null,"topics":["nestjs","nestjs-backend","paystack"],"latest_commit_sha":null,"homepage":"https://aiki.dovely.tech","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/claudiusayadi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-06T18:28:11.000Z","updated_at":"2025-10-08T04:51:17.000Z","dependencies_parsed_at":"2025-10-08T06:26:03.811Z","dependency_job_id":"ab04139f-1f98-4f3f-93b8-a8d312467529","html_url":"https://github.com/claudiusayadi/aiki","commit_stats":null,"previous_names":["claudiusayadi/aiki"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/claudiusayadi/aiki","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claudiusayadi%2Faiki","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claudiusayadi%2Faiki/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claudiusayadi%2Faiki/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claudiusayadi%2Faiki/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/claudiusayadi","download_url":"https://codeload.github.com/claudiusayadi/aiki/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/claudiusayadi%2Faiki/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279005657,"owners_count":26083941,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nestjs","nestjs-backend","paystack"],"created_at":"2025-10-11T00:16:07.967Z","updated_at":"2025-10-11T00:16:10.671Z","avatar_url":"https://github.com/claudiusayadi.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Aiki\n\nA modern task management API built with NestJS, designed to help users organize and prioritize their work efficiently through flexible subscription plans.\n\n## Overview\n\nAiki (from the Hausa word for \"tasks\") is a RESTful API that provides comprehensive task management capabilities with integrated payment processing. The platform supports multiple subscription tiers, allowing users to choose plans that match their productivity needs.\n\n## Features\n\n### Core Functionality\n\n- **Task Management**: Create, update, delete, and restore tasks with soft-delete support\n- **User Authentication**: Secure JWT-based authentication with email verification\n- **Flexible Plans**: Multiple subscription tiers including free starter, pay-per-task, and unlimited subscription models\n- **Payment Integration**: Seamless Paystack integration for payment processing\n- **Email Notifications**: Automated email delivery for account verification\n- **Rate Limiting**: Built-in request throttling for API protection\n- **Health Monitoring**: Application health check endpoints\n\n### Technical Highlights\n\n- RESTful API architecture with Swagger documentation\n- PostgreSQL database with TypeORM\n- Redis for session management\n- Cookie-based authentication\n- Role-based access control (RBAC)\n- Comprehensive error handling and logging\n- Environment-based configuration\n\n## Technology Stack\n\n- **Framework**: NestJS\n- **Language**: TypeScript\n- **Database**: PostgreSQL with TypeORM\n- **Cache**: Redis (ioredis)\n- **Authentication**: Passport.js with JWT strategy\n- **Email**: Nodemailer with Handlebars templates\n- **Payments**: Paystack API integration\n- **Validation**: class-validator and class-transformer\n- **Security**: Helmet, CORS, Argon2 password hashing\n- **Documentation**: Swagger/OpenAPI\n\n## Prerequisites\n\n- Node.js 18.x or higher\n- PostgreSQL 14.x or higher\n- Redis 6.x or higher\n- Yarn package manager (or your preferred pm)\n\n## Installation\n\n```bash\n# Install dependencies\nyarn install\n\n# Set up environment variables\ncp .env.example .env\n# Edit .env with your configuration\n\n# Run database migrations\nyarn migration:run\n```\n\n## Configuration\n\nCopy the `.env.example` file to `.env` and fill in the required configuration values.\n\n## Running the Application\n\n```bash\n# Development mode with watch\nyarn start:dev\n\n# Production build\nyarn build\nyarn start:prod\n\n# Debug mode\nyarn start:debug\n```\n\nThe API will be available at `http://localhost:5154/api/v1`\n\nSwagger documentation: `http://localhost:5154/api/v1/docs`\n\n## Database Migrations\n\n```bash\n# Generate a new migration\nyarn migration:generate --name=MigrationName\n\n# Run pending migrations\nyarn migration:run\n\n# Revert last migration\nyarn migration:revert\n```\n\n## API Endpoints\n\n### Authentication\n\n- `POST /api/v1/auth/signup` - Register a new user\n- `POST /api/v1/auth/signin` - Sign in with credentials\n- `POST /api/v1/auth/signout` - Sign out current user\n- `POST /api/v1/auth/refresh` - Refresh access token\n- `POST /api/v1/auth/verify-email` - Verify email address\n- `POST /api/v1/auth/resend-verification` - Resend verification code\n- `PATCH /api/v1/auth/change-password` - Change user password\n\n### Tasks\n\n- `POST /api/v1/tasks` - Create a new task\n- `GET /api/v1/tasks` - List all tasks\n- `GET /api/v1/tasks/:id` - Get task by ID\n- `PATCH /api/v1/tasks/:id` - Update a task\n- `DELETE /api/v1/tasks/:id` - Soft delete a task\n- `GET /api/v1/tasks/:id/restore` - Restore a deleted task\n\n### Plans\n\n- `POST /api/v1/plans` - Create a new plan (admin)\n- `GET /api/v1/plans` - List available plans\n- `GET /api/v1/plans/:id` - Get plan details\n- `PATCH /api/v1/plans/:id` - Update a plan (admin)\n- `DELETE /api/v1/plans/:id` - Delete a plan (admin)\n\n### Payments\n\n- `POST /api/v1/payments/initialize` - Initialize a payment\n- `POST /api/v1/payments/verify` - Verify a payment\n- `POST /api/v1/payments/webhook` - Paystack webhook handler\n- `GET /api/v1/payments` - List user payments\n- `GET /api/v1/payments/:id` - Get payment details\n\n### Users\n\n- `GET /api/v1/users` - List users (admin)\n- `GET /api/v1/users/:id` - Get user by ID\n- `PATCH /api/v1/users/:id` - Update user\n- `DELETE /api/v1/users/:id` - Delete user\n- `GET /api/v1/users/recover` - Recover deleted user account\n\n### Health\n\n- `GET /api/v1/health` - Application health check\n- `GET /api/v1/health/metrics` - Detailed health metrics\n\n## Testing (WIP)\n\n```bash\n# Run unit tests\nyarn test\n\n# Run tests in watch mode\nyarn test:watch\n\n# Generate test coverage\nyarn test:cov\n\n# Run end-to-end tests\nyarn test:e2e\n```\n\n## Project Structure\n\n```\nsrc/\n├── core/               # Core functionality\n│   ├── config/        # Configuration files\n│   ├── db/            # Database setup and migrations\n│   ├── redis/         # Redis service\n│   └── common/        # Shared utilities and decorators\n├── modules/           # Feature modules\n│   ├── auth/          # Authentication module\n│   ├── email/         # Email service\n│   ├── health/        # Health check module\n│   ├── payments/      # Payment processing\n│   ├── plans/         # Subscription plans\n│   ├── tasks/         # Task management\n│   └── users/         # User management\n└── main.ts            # Application entry point\n```\n\n## Security\n\n- Passwords hashed with Argon2\n- JWT tokens for stateless authentication\n- HTTP-only cookies for token storage\n- Rate limiting to prevent abuse\n- CORS configuration\n- Helmet for security headers\n- SQL injection prevention via TypeORM\n\n## Deployment\n\nFor production deployment:\n\n1. Set `NODE_ENV=production` in environment variables\n2. Configure your production database connection\n3. Set up SSL/TLS certificates for HTTPS\n4. Configure proper CORS origins\n5. Set up Redis for session storage\n6. Configure email service credentials\n7. Set up Paystack production keys\n8. Run database migrations\n9. Build and start the application:\n\n```bash\nyarn build\nyarn start:prod\n```\n\n## License\n\nUNLICENSED - Proprietary software\n\n## Support\n\nFor issues and questions, please refer to the project's issue tracker or contact me on [X](https://x.com/ClaudiusAyadi)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclaudiusayadi%2Faiki","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclaudiusayadi%2Faiki","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclaudiusayadi%2Faiki/lists"}