DEV Community

Cover image for From Scratch to Sync: How I Built My Own Notepad App- Aurinote
Shafayet Hossain Yashfi
Shafayet Hossain Yashfi

Posted on

1 1

From Scratch to Sync: How I Built My Own Notepad App- Aurinote

Aurinote is a note-taking app built specifically with developers and modern productivity needs in mind. This post breaks down the tech stack, features, challenges, and development insights behind the project.

👇 Why I Built Aurinote

Honestly, i don't even know. I just wanted to build something like Notepad we usually get with the Windows by default and i end up with that.😭


🛠️ The Stack

Here’s a quick overview of the technologies used:

Tech Purpose
React + Vite Frontend framework & fast dev server
TypeScript Type safety and better DX
shadcn/ui + Tailwind CSS UI and styling
Supabase Auth, storage, and database backend
TipTap Rich text editor
Highlight.js Code block syntax highlighting
Tanstack Query Data fetching and caching
Sonner Toast notifications

🔐 Supabase Auth + RLS

User accounts are powered by Supabase Auth with email + password. Each user has a profile including name and avatar, stored in Supabase storage.

(user_id = auth.uid())
Enter fullscreen mode Exit fullscreen mode

This ensures that each user can only read, update, or delete rows where the user_id matches their authenticated ID. It’s a small line, but a huge step for securing user data. Supabase also handles session persistence, so users stay logged in across visits.

Image description

Image description

Rich Text Editing with TipTap

TipTap gives the editing experience a major boost, allowing:

  • Headings, paragraphs, lists
  • Code blocks with syntax highlighting
  • Keyboard shortcuts for formatting
  • Copy-paste support

Image description

All note data is stored in HTML format, giving flexibility in rendering.

Avatar Uploads + Compression

Users can upload a custom avatar, which is compressed client-side using a canvas API before uploading to Supabase Storage. This helps reduce storage size and improve loading performance.

Image description

Image description

Note Management

Notes are stored per-user and can be created, edited, and deleted from a dashboard view. The editor interface is simple and distraction-free, keeping the focus on writing.

Image description

Theming & UI

Built using Tailwind CSS and shadcn/ui, the interface is responsive, clean, and consistent across screen sizes. Features include:

  • Dark/light/Vibe/Ocean/Sunrise/Forest mode
  • Responsive design

Image description

App Structure Overview

While the codebase isn’t publicly available, here’s a quick look at how I structured the project internally for maintainability and scalability:

src/
  components/
  context/
  pages/
  services/
  types/
  hooks/
Enter fullscreen mode Exit fullscreen mode
  • Context handles global auth and theme state
  • Hooks manage data fetching and session control
  • Services handle Supabase API interactions
  • Components include reusable UI building blocks

This modular structure helped keep the logic clean and organized, especially as features started to grow.

Challenges Faced

Authentication Refresh:
Keeping the app in sync after login/logout or profile updates was trickier than expected. Supabase session changes didn’t always propagate cleanly across components, so I implemented a global context and used a useEffect listener on onAuthStateChange to keep everything reactive.

Image Upload Optimization:
Raw uploads were slow and bulky. To reduce file sizes and improve UX, I compress images client-side using the HTML canvas API before sending them to Supabase Storage.

UI Sync & Cache Invalidation:
Some UI elements weren’t updating instantly after changes especially on note edits or theme toggles. I introduced conditional re-fetching and manual state updates in context to patch these sync delays.

Row-Level Security (RLS) Headaches:
Supabase's RLS is powerful, but even one wrong policy can block data or expose too much. Debugging policy logic while working with multiple users and shared notes was a bit of a minefield. Had to write precise rules and test thoroughly to avoid privilege leakage.

Supabase Rate Limits & Quotas:
When syncing notes across multiple sessions or devices rapidly (e.g., for real-time collab), I ran into some subtle Supabase request throttling. Caching responses locally and debouncing input saves helped reduce strain.

Responsive Design with State-Heavy UI:
Because of animations, theme toggles, and real-time syncing, managing layout shifts without UI jank (especially on mobile) was a major design+tech balancing act. I used Tailwind with media queries and conditional rendering to minimize unnecessary re-renders.

Features Completed

  • User registration & login
  • Profile management (avatar + name)
  • Create/edit/delete notes
  • Rich text editing
  • Syntax-highlighted code blocks
  • Responsive layout
  • Light/dark theme toggle
  • Keyboard shortcuts

Next Steps

Aurinote is still under development, but upcoming features might include:

  • Real-time collaborative editing
  • Offline mode
  • Exporting notes (PDF, Markdown)
  • Tagging and search functionality
  • Mobile-friendly PWA

Whatever,,,

Aurinote started as a side project, but it’s grown into something genuinely useful for everyday writing and note taking. If you’re a developer who wants a focused space to think, plan, or write—this might be a good fit🤷‍♂️

CHECK IT OUT

Github

Feel free to share feedback or ideas in the comments!!!

Heroku

Built for developers, by developers.

Whether you're building a simple prototype or a business-critical product, Heroku's fully-managed platform gives you the simplest path to delivering apps quickly — using the tools and languages you already love!

Learn More

Top comments (0)

Image of Datadog

Get the real story behind DevSecOps

Explore data from thousands of apps to uncover how container image size, deployment frequency, and runtime context affect real-world security. Discover seven key insights that can help you build and ship more secure software.

Read the Report

👋 Kindness is contagious

Explore a trove of insights in this engaging article, celebrated within our welcoming DEV Community. Developers from every background are invited to join and enhance our shared wisdom.

A genuine "thank you" can truly uplift someone’s day. Feel free to express your gratitude in the comments below!

On DEV, our collective exchange of knowledge lightens the road ahead and strengthens our community bonds. Found something valuable here? A small thank you to the author can make a big difference.

Okay