This project is designed to streamline the management of tasks, allowing users to view, edit, or delete tasks efficiently. With its intuitive table list view, users can effortlessly search tasks across any field and sort them by due date or creation date, ensuring a smooth task management experience.
This project currently contains a single commit, a practice not intended for production environments.
Leveraging serverless architecture with DynamoDB and Lambda, the system auto-scales according to traffic demands, ensuring robust performance regardless of load.
While DynamoDB excels in performance, it comes with a trade-off in flexibility compared to structured relational databases. Its design necessitates a well-defined access pattern, making it less adaptable to changes in database structure or querying requirements. This inflexibility could pose challenges if future modifications to the data model or access patterns are required.
Ideally, sorting and searching should be implemented at the database level to optimize performance and handle pagination efficiently. Currently, these features are implemented in the frontend due to time constraints.
- Implement debounce for table search to enhance performance.
- Refactor authentication to use session cookies in the frontend.
- Transition environment variables to SST configurations.
- Implement stage deployment for production.
- Integrate CI/CD using SEED.
- Enhance testing and linting processes.
- Optimize NextJS component loading.
- Implement subdomain for API.
- Optimize for mobile devices.
- Improve error handling in frontend and backend.
- Implement schema validation in the backend.
- Use asdf for runtime version management.
# | PK | SK | Data | GSI 1 PK |
---|---|---|---|---|
1 | USER#{userId} | PROFILE | ...user profile data | GOOGLE#{externalUserId} |
2 | USER#{userId} | TASK#{taskId} | ...task data |
This design supports the 'one-user-many-tasks' model, addressing all required access patterns effectively.
- Frontend: NextJS - A React framework for building user interfaces.
- UI: Mantine - A modern UI library for React.
- Backend: ExpressJS - A web application framework for Node.js.
- Database: DynamoDB - A NoSQL database service. Motivation for using DynamoDB.
- Serverless: SST - Simplifies serverless application development. About SST and why serverless.
- Authentication: Google OIDC Single Sign-On. Overview of Google OIDC.
Inspired by: NextJS 13 Folder Structure
Node.js (version 18 or later) and npm (version 7 or later). Download Node.js
- Create an AWS account and configure your local environment. AWS IAM User Guide and AWS CLI Configuration Guide.
- For CLI with MFA, follow this MFA Authentication Guide.
npm install # Install dependencies
npm run dev
Your backend public URL will be displayed after deployment:
✔ Deployed:
StorageStack
AppStack
ApiEndpoint: https://xxxx.ap-southeast-1.amazonaws.com
- Create a Google SSO client ID and authorize your backend URL. Google SSO Guide.
- Update the
GOOGLE_CLIENT_ID
in/stacks/AppStack.ts
.
cd packages/web
npm run dev
npm run remove