Placeverse is a web application for managing, sharing, and tracking interesting places and personal travel experiences. The project is built with Nuxt 3, Supabase, TypeScript, and Tailwind CSS.
- User registration and login (Supabase Auth)
- Add, edit, and delete locations
- Track visited places
- Add photos to locations
- Manage photo gallery (via location detail)
- Share links to social media
- Mobile optimization
- Secure data storage (RLS policies in Supabase)
- Nuxt 3 (Vue 3, SSR/SPA)
- TypeScript
- Tailwind CSS
- Supabase (PostgreSQL, Auth, Storage)
- Zod (form validation)
app.vue
nuxt.config.ts
package.json
tsconfig.json
assets/ # CSS, images
components/ # UI components (forms, layouts, buttons)
database/ # SQL scripts for Supabase (triggers, policies)
layouts/ # Page layouts
middleware/ # Auth middleware
pages/ # Main pages (index, login, register, location/add, location/edit)
public/ # Static files (favicon, images)
server/ # Server-side code (if used)
types/ # TypeScript types
utils/ # Helper utilities
-
Clone the repository:
git clone https://github.com/MichalSaraz/placeverse.git cd placeverse
-
Install dependencies:
pnpm install
-
Configure environment variables:
- Create a
.env
file based on.env.example
- Fill in:
SUPABASE_URL="https://your-project-id.supabase.co" SUPABASE_KEY="your-anon-public-key"
- Create a
-
Start the development server:
pnpm dev
- Default address: http://localhost:3000
-
Supabase setup:
- All database operations, policies, and storage are managed via Supabase.com
- Deployed on: Vercel — https://vercel.com/michal-sarazs-projects/placeverse
- Build command:
pnpm build
- Environment variables required on Vercel:
SUPABASE_URL
— your Supabase project URLSUPABASE_KEY
— your Supabase anon/public key (or service role where appropriate)
- Recommended Vercel settings:
- Framework preset: Auto / Nuxt
- Node version: 18+
- Production Branch:
main
(optional)
- RLS policies: Make sure you have correct INSERT, SELECT, UPDATE policies (see documentation)
- Storage: Photos are stored in Supabase Storage; triggers for deletion are in
database/cascade_delete_photos.sql
- Auth: Uses Supabase Auth (email/password)
- Nuxt: ^3.17.3
- Supabase: ^2.49.8
- TailwindCSS: ^4.1.7
- TypeScript: ^5.6.3
- Zod: ^3.25.49
- Author: Michal Saraz
- License: MIT (see project settings)