247 words
1 minute
Full Stack Memo App

Try it out#

An online deployment is available at https://notes.nuvraine.com/
Please feel free to create an account and try it out!

Highlights#

Robust and Secure Authentication#

Implemented secure authentication using PostgreSQL and JWT, featuring HTTP-only, revocable refresh tokens with automatic access-token rotation. Supports shareable links with granular view/edit permissions, as well as adding, updating, and revoking other users’ access to notes.

Testable and Extensible Architecture#

Built the backend as an independent service using Express, PostgreSQL, and Prisma, decoupled from the frontend. Implemented automated testing with Jest and Supertest. The standalone API design also enables future mobile client development.

Containerized Deployment#

Deployed the frontend, backend, and database using Podman + Quadlet, and securely exposed services to the public internet via Cloudflare Tunnels.

Maintainable UI System#

Leveraged MUI’s customization capabilities to extend and refine existing components with custom variants and styles, significantly reducing UI development and maintenance complexity while ensuring consistent styling across the application.

My learnings#

  • Authentication in Practice: Gained hands-on experience with HTTP-only cookies, access and refresh token flows, and server-side sessions. Implemented public share links and fine-grained access control for managing user permissions.

  • Using Prisma with PostgreSQL: Learned how to use Prisma and PostgreSQL in a production setting, including schema design, migrations, and deployment with tools such as Podman.

  • API Testing with Supertest and Jest: Developed backend testing workflows using Jest and Supertest to validate API endpoints, configure isolated test databases, and automatically clean up database state after test execution.

App Screenshot#

Register & Login Page#

Register & Login Page

Shared Notes Page#

Shared Notes Page

Permission Management#

Permission Management

Responsive Layout#

Responsive Layout

Dark Mode Support#

Dark Mode Support