A clean, simple wiki system built with Nuxt 4, featuring S3 storage, Supabase authentication, and a three-panel interface for editing markdown files.
- Authentication - User registration and login with Supabase
- S3 Storage - Files stored as markdown in AWS S3 bucket
- Three-Panel Layout - Navigation | Editor | Table of Contents
- Markdown Editor - Live preview and keyboard shortcuts (Ctrl/Cmd+S to save)
- File Management - Create, edit, and delete markdown files
- Directory Structure - Organized file navigation
- Table of Contents - Auto-generated from markdown headings
Copy .env.example to .env and fill in your credentials:
cp .env.example .envRequired variables:
SUPABASE_URL- Your Supabase project URLSUPABASE_ANON_KEY- Your Supabase anonymous keyAWS_ACCESS_KEY_ID- AWS access keyAWS_SECRET_ACCESS_KEY- AWS secret keyAWS_REGION- AWS region (e.g., us-east-1)S3_BUCKET_NAME- S3 bucket name for storing files
- Create a new Supabase project
- Enable email authentication in Authentication > Settings
- Copy the URL and anon key to your
.envfile
- Create an S3 bucket
- Set up IAM user with permissions for:
s3:GetObjects3:PutObjects3:DeleteObjects3:ListBucket
- Add credentials to
.envfile
npm installnpm run dev- Navigate to the application
- Sign up or sign in with your email
- Use the left panel to navigate and create files
- Edit files in the center panel with markdown
- View the table of contents in the right panel
- Save with Ctrl/Cmd+S or the Save button
app/
├── components/
│ ├── MarkdownEditor.vue # Main editor component
│ ├── TableOfContents.vue # TOC navigation
│ └── WikiNavigation.vue # File navigation
├── composables/
│ └── useAuth.ts # Authentication composable
├── pages/
│ ├── index.vue # Landing page
│ └── wiki.vue # Main wiki interface
├── plugins/
│ └── supabase.client.ts # Supabase client setup
└── server/api/wiki/
├── files.get.ts # List files
├── [...path].get.ts # Get file content
├── [...path].put.ts # Save file
└── [...path].delete.ts # Delete file
GET /api/wiki/files- List all files in rootGET /api/wiki/[path]- Get file content or directory listingPUT /api/wiki/[path]- Save file contentDELETE /api/wiki/[path]- Delete file
- Nuxt 4 - Vue.js framework
- Nuxt UI - Component library
- Supabase - Authentication and user management
- AWS S3 - File storage
- Marked - Markdown parser
- TypeScript - Type safety