Repository guide: code map, authentication flows, scripts and limits. AGENTS.md provides concise instructions for coding assistants.
Pausa is a modern web application built with Nuxt and Supabase that serves as a minimal authentication template and starter kit for developers. It provides a robust authentication flow that can be integrated into any application in seconds.
Pausa is a minimal authentication solution that allows developers to integrate a robust authentication flow into their applications in seconds. It functions as a starter template that includes everything needed to handle user authentication and management.
- Frontend: Nuxt 3.17.3 with TypeScript
- UI Framework: Nuxt UI 3.1.2
- Authentication: Supabase Auth (no application database schema is implemented here)
- Global State: Pinia
- Animations: VueUse Motion
- State Management: Composables + Stores
- Nuxt for powerful, streamlined development
- Nuxt UI for customizable and sleek UI components
- Pinia for state management simplicity
- Tailwind CSS for responsive and modern design
- Supabase for backend-as-a-service with authentication
- Uses the Nuxt v4 folder convention through
future.compatibilityVersion: 4
app/
βββ components/
β βββ Auth/ # Complete authentication components
β βββ Dashboard/ # Dashboard components
β βββ Landing/ # Landing page components
β βββ App/ # General app components
βββ layouts/ # Layouts for different sections
βββ pages/ # Application routes
βββ stores/ # Global state with Pinia
βββ middleware/ # Authentication middleware
βββ composables/ # Reusable logic
- β User registration with email/password
- β Traditional login
- β Social provider authentication
- β Password recovery
- β Magic links
- β Route protection middleware
- β Session management with Supabase
- Landing Page β Redirects to dashboard if already authenticated
- Sign Up β Registration with password validation
- Sign In β Login with multiple options
- Dashboard β Protected area with sidebar and navigation
- Responsive Design: Adaptable to mobile and desktop
- Dark/Light Mode: Automatic toggle
- Smooth Animations: Transitions with VueUse Motion
- Reusable Components: Based on Nuxt UI v3
- Collapsible Sidebar: Adaptive navigation
- Validated Forms: With visual feedback
- SEO: Public-home canonical/schema; auth and app routes remain outside indexing
- TypeScript: Nuxt type checking enabled during build
- Hot Module Replacement: Fast development
- Auto-imports: Automatic Nuxt configuration
- Tailwind CSS v4: Modern styling
- Pinia Store: For transient form fields; Supabase owns the session
- Composables: For reusable logic
- Supabase Client: Authentication actions and session/user access
- Completeness: Complete and functional auth system
- Modernity: Updated technology stack
- Scalability: Modular and extensible architecture
- UX/UI: Modern and accessible interface
- Developer Experience: Optimized configuration
- Documentation: Detailed README
- Startups needing quick authentication
- MVPs with authentication requirements
- Projects requiring login/registration
- Templates for developers
- Basic SaaS applications
- More authentication providers
- Advanced user profiles
- Roles and permissions
- Real-time notifications
- Integrated analytics
- Node.js 22 or another runtime supported by the installed Nuxt version
- Bun, using the committed
bun.lock - Supabase Account: You need to have a Supabase account and be familiar with creating projects
- OAuth Providers Setup: Familiarity with creating OAuth applications for Google and GitHub
- Create a free account at Supabase
- Create a new project in your Supabase dashboard
- Familiarize yourself with the Supabase dashboard and API settings
- Follow Supabase's current Google login guide.
- Configure the Google OAuth client and the authorized origins/callback supplied by your Supabase project.
- Store the provider credentials in Supabase's provider settings, not in this repository.
- Follow Supabase's current GitHub login guide.
- Configure the GitHub OAuth app with the callback supplied by your Supabase project.
- Store the provider credentials in Supabase's provider settings.
- In your Supabase dashboard, go to "Authentication" β "Providers"
- Enable and configure Google and GitHub providers
- Add the Client IDs and Client Secrets from the previous steps
- Verify the Site URL and allowed redirect URLs for each environment. Source code does not confirm dashboard configuration.
Auth/Providers.vuecurrently passes a relative/app/dashboardredirect; email flows build absolute URLs fromNUXT_SITE_URL. See the guide before diagnosing return-path behavior.
-
Clone the repository:
git clone https://github.com/{username}/pausa.git cd pausa -
Install dependencies:
bun install --frozen-lockfile
-
Set up environment variables:
Configure these names in your local environment and deployment provider. Do not commit values:
Name Purpose SUPABASE_URLProject endpoint used by the Supabase module. SUPABASE_KEYBrowser-compatible Auth key; never a privileged server key. NUXT_SITE_URLSite origin used for email and recovery redirects. Important Notes:
- The OAuth providers (Google and GitHub) are configured directly in your Supabase dashboard
- No additional environment variables are needed for OAuth as Supabase handles the configuration
- Make sure you've completed the OAuth setup steps above before testing social login
Production requires its own correct environment and allowed redirects; no private project identifiers or credentials belong in documentation.
Start the development server:
bun run devThe application will be available at http://localhost:3000.
To build the project for production:
bun run buildUse the Nitro preset appropriate to your host. With the Node server preset, bun run build
produces .output/, started using node .output/server/index.mjs. Preview locally with
bun run preview. bun run generate is a separate static-generation option; verify auth
redirects and hosting behavior before selecting it. There is no default dist/ deployment here.
- Verify the OAuth client and authorized callback against the current Google guide above
- Check that your Client ID and Secret are correctly configured in Supabase
- Check provider consent/audience settings and Supabase's allowed return URLs
- Verify the Authorization callback URL is set correctly in GitHub OAuth App settings
- Ensure the Client ID and Secret are properly configured in Supabase
- Check the provider error and Supabase's allowed return URLs; do not infer remote settings from the local code
- Double-check your
SUPABASE_URLandSUPABASE_KEYin the.envfile - Ensure your Supabase project is active and not paused
- Verify that Authentication is enabled in your Supabase project settings
If you encounter issues:
- Check the Supabase Documentation
- Review the Nuxt 3 Documentation
- Check the Nuxt UI Documentation
- Open an issue in this repository with detailed error information
app/stores/auth.ts exports useAuthStore. Its nested state object holds name, email,
password and confirm_password form fields; resetState clears them. The authenticated
user and session come from Supabase composables, not from those fields. Do not log form
passwords or session tokens when investigating state.
- Auth Components: Complete authentication flow
- Dashboard Components: Authenticated workspace navigation; no admin-role system
- Landing Components: Marketing and entry pages
- App Components: General application components
index.vue: Main landing pageauth/: Authentication pages (sign-in, sign-up, etc.)app/: Protected application pages
default.vue: Default application layoutauth.vue: Authentication layoutdashboard.vue: Dashboard layout with sidebar
- Route Protection: Middleware guards dashboard/settings navigation; future APIs/data need their own authorization
- Input Validation: Form field checks; not a general sanitization layer
- Session Management: Supabase Auth sessions, with provider configuration verified separately
- Environment Variables: Configuration names documented above; never commit credentials or privileged keys
- Color Schemes: Dark and light mode support
- Typography: Consistent text hierarchy
- Spacing: Systematic spacing system
- Components: Reusable UI components
Pausa is an excellent starter template that demonstrates best practices in Nuxt 3 development. It offers a complete, modern, and well-structured authentication solution that can serve as a solid foundation for any application requiring user management.
The project follows Nuxt 3 conventions, uses TypeScript correctly, and provides a smooth development experience with all the modern tools needed to build scalable web applications.
Contributions are welcome! Please open an issue or submit a pull request for any changes.
This project is licensed under the MIT License.
