MemoryTree is a full-stack journaling application built to turn scattered memories into a structured, navigable story of your life.
What I Built
I designed and built the entire application end-to-end — a Node.js/Express/PostgreSQL backend and a React + Vite frontend — as both a personal tool and a deep dive into full-stack fundamentals. The app organizes memories into a three-level hierarchy: Events (life chapters like Travel, Relationship, Career, Health, and Goals), Memory Entries (specific moments within an event), and Media (photos attached to each memory).
Key Features
- Full auth system with email verification, JWT access tokens, and httpOnly refresh token cookies for secure cross-domain sessions
- A winding style memory trail with chronological spacing, node size that scales with memory "weight," and scroll-driven rope animation
- Story and Read mode for browsing memories, with anchored popovers and full memory pages with prev/next navigation
- Cloudinary-backed photo uploads with a polaroid-style display, cover images with gradient overlays, and a handwritten-font aesthetic layered over a paper-grain texture
- Ownership-safe CRUD across events, memories, and media using controller-level chain-walking instead of complex SQL joins
Tech Stack
Node.js, Express, PostgreSQL, React, Vite, JWT, Cloudinary, Brevo (transactional email), deployed on Render (backend) and Vercel (frontend).