A web application for tracking and sharing ORCA figure travels around the world. Each ORCA figure has its own journey, and colleagues can capture and share moments from different locations.
- Email-based authentication with verification codes
- Multi-language support (English, German)
- Submit entries with photos and location data
- Automatic geolocation detection
- Interactive location search with address suggestions
- View travel history in a logbook format
- Interactive map showing travel routes and locations
- Individual journey tracking for each ORCA
- Responsive design for mobile and desktop
- Beautiful loading states and animations
- Secure file uploads with Vercel Blob Storage
- Next.js 14 with App Router
- TypeScript
- Tailwind CSS
- Supabase (Database & Storage)
- TanStack Query (React Query)
- React Leaflet for maps
- i18next for internationalization
- Vercel Blob Storage for images
- Resend for transactional emails
- OpenStreetMap/Nominatim for geocoding
- Clone the repository
- Install dependencies:
npm install
- Copy
.env.example
to.env.local
and fill in the required environment variables:NEXT_PUBLIC_SUPABASE_URL=your-supabase-project-url NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key BLOB_READ_WRITE_TOKEN=your-vercel-blob-token RESEND_API_KEY=your-resend-api-key EMAIL_SENDER_ADDRESS=your-sender-email EMAIL_SENDER_NAME=your-sender-name SESSION_DURATION_DAYS=7
- Run the development server:
npm run dev
- Open http://localhost:3000 in your browser
Create the following tables in your Supabase database: View the full schema
The application uses a passwordless authentication system:
- User enters their email address
- A 6-digit verification code is sent via email
- User enters the code to verify their identity
- A session is created and stored in an HTTP-only cookie
- Sessions expire after the configured duration (default: 7 days)
The application supports multiple languages:
- English (default)
- German
- More languages can be easily added via the translation files
Language detection order:
- User's manual selection (stored in localStorage)
- Browser language
- Falls back to English
- Create a new project on Vercel
- Connect your repository
- Add the required environment variables:
NEXT_PUBLIC_SUPABASE_URL
NEXT_PUBLIC_SUPABASE_ANON_KEY
BLOB_READ_WRITE_TOKEN
RESEND_API_KEY
EMAIL_SENDER_ADDRESS
EMAIL_SENDER_NAME
SESSION_DURATION_DAYS
- Deploy!
- All authentication codes expire after 15 minutes
- Sessions are stored in HTTP-only cookies
- Email verification required for access
- Restricted email domains for authentication
- Secure file upload handling
- Row Level Security enabled on all tables