artjournal.ing - wins and fails so far

Art Journal - A Digital Art Journaling App

Live: artjournal.ing

Project Description

Art Journal is a modern digital art journaling app designed to help you document exhibitions, concerts, performances, and your own creative work in one beautiful timeline. Built as a personal project after visiting STRAAT Museum in Amsterdam with my son, I wanted a way to capture not just photos, but the emotions and reflections that come with experiencing art.

Main Features

  • Personal Art Timeline - Document museum visits, concerts, and your own creative work
  • Multiple Visibility Modes - Private, friends-only, or public moments
  • Social Features - Friend connections, likes, comments, and notifications
  • User Search - Find friends and discover public art moments by artist, venue, or tags
  • SEO-Optimized Blog - Integrated blog with dynamic sitemap for content marketing
  • GDPR Compliance - Data export, account deletion, privacy controls
  • PWA Support - Installable on mobile devices with offline capabilities

Tech Stack

Category Technology
Framework Next.js 16 (App Router)
Language TypeScript
Styling Tailwind CSS v4
UI Components shadcn/ui + Radix UI
Database Supabase (PostgreSQL)
Auth Supabase Auth
Storage Supabase Storage
Analytics Vercel Analytics
Deployment Vercel

Technical Highlights

  • Row Level Security (RLS) on all 7 database tables with granular policies for data protection
  • Security Headers - X-Frame-Options, HSTS, CSP, XSS Protection
  • Dynamic Sitemap - Auto-generates sitemap including user profiles for SEO
  • Server Actions - All data mutations use Next.js server actions with auth checks
  • Username-based URLs - Human-readable profile URLs (/u/username)
  • Optimistic UI - Instant feedback on likes and social interactions

Main Wins

  1. Built entirely with v0 - From initial concept to production app, the entire development was done through v0 conversations, showcasing what’s possible with AI-assisted development.
  2. Real-time iteration - Quickly pivoted features based on needs: added username-based URLs (/u/username), GDPR compliance (data export/delete), and SEO blog in the same session.
  3. Production-ready security - Implemented RLS on all tables, security headers, proper auth flows, and privacy controls without compromising development speed.
  4. Dynamic SEO - Created a sitemap that automatically includes new user profiles and blog posts, plus optimized content with targeted keywords like “art journal diary”.
  5. Full social platform - Friends system, notifications, likes, comments, and privacy controls all working together seamlessly.

Main Challenges

  1. Build errors with @vercel**/analytics** - The Analytics component kept causing deployment failures. Had to carefully remove and re-add it after other fixes were in place.
  2. Missing function exports - The username profile page referenced getFriendshipStatus which didn’t exist yet, causing cryptic build failures. Debugging required tracing the actual error in deployment logs.
  3. Sitemap domain mismatch - Initially hardcoded wrong domain (artjournal.app instead of artjournal.ing), causing Google Search Console to reject all URLs.
  4. TypeScript strict mode - Unused imports (like notFound, Tabs, ArrowLeft) caused silent build failures. Had to clean up all unused code.
  5. Database migrations timing - Adding the username system required careful ordering: migration first, then code changes, to avoid runtime errors on missing columns.
1 Like