Built with PocketBase, Go, Alpine.js, and Tailwindcss for rapid web development
mise is a polyglot tool version manager that ensures consistent development environments.
Use mise to install Go v1.24 or higher.
# Install mise (if not already installed)
curl https://mise.run | sh
# Trust the pre-existing configuration
mise trust
# Install all required tools
mise installAir is a tool for automatically rebuilding and restarting go applications in development when changes are made to certain files.
# Install air
go install github.com/air-verse/air@latest# Install Go dependencies
go mod tidy# Development mode with hot reloading
mise devThe application will be available at http://127.0.0.1:8090
On first run, PocketBase will prompt you to create a superuser account. This account will have full access to the PocketBase admin panel at http://127.0.0.1:8090/_/
After creating your superuser account:
- Log in to the PocketBase admin panel
- Navigate to Settings β Auth providers
- Enable Google OAuth provider
- Configure with your Google OAuth credentials:
- Client ID: Your Google OAuth client ID
- Client Secret: Your Google OAuth client secret
To obtain Google OAuth credentials:
- Go to Google Cloud Console
- Create a new project or select an existing one
- Enable the Google+ API
- Create OAuth 2.0 credentials
- Add authorized redirect URI:
http://127.0.0.1:8090/api/oauth2-redirect
To enable email functionality (password resets, verification emails, etc.):
- In the PocketBase admin panel, go to Settings β Mail settings
- Configure your SMTP settings:
- SMTP server: Your email provider's SMTP server
- Port: Usually 587 for TLS or 465 for SSL
- Username: Your SMTP username
- Password: Your SMTP password
- Use TLS: Enable for secure connection
Popular transactional email providers:
To enable integration with S3 compatible storage:
- In the PocketBase admin panel, go to Settings β File storage
- Enable Use S3 Storage
- Configurate your S3 storage settings:
- Endpoint: The host url
- Bucket: The bucket name
- Region: The region the storage is hosted
- Access key: Access key from provider
- Secret: Secret value from provider
Popular S3 File Storage providers
- AWS S3, of course
- Cloudflare R2
- Digital Ocean Spaces
- Backblaze B2
- Wasabi
Consider Stripe No-Code integration
βββ main.go # Main application entry point
βββ go.mod # Go packages
βββ tailwind.css # Source file for Tailwindcss related assets
βββ .air.toml # Air Configuration
βββ mise.toml # Mise configuration
βββ package.json # Node packages (pnpm)
βββ templates/ # Templ templates
β βββ components # Reusable UI fragments
β βββ icons # SVG icons
β βββ layout # Layouts for global elements
β βββ pages # Content served per route in main.go
βββ pb_data/ # PocketBase data (gitignored)
βββ pb_migrations/ # PocketBase migrations
βββ pb_public/ # Static files served by PocketBase
β βββ css/main.css # Generated by Tailwind CLI
β βββ images/ # Graphical assets
βββ tmp/ # Temporary build files
While mise dev is running any changes to .go, .templ, or other watched files (see .air.toml) will automatically rebuild and restart the application.
Template files (.templ) are automatically transpiled to Go code before building.
The application uses Tailwindcss and DaisyUI styling, providing:
- Full control over styling from template files
- Responsive design with modern CSS features
- No additional JS dependencies
- Clean, semantic, and accessibility compliant HTML structure
- Reactive data binding
- Component state management
- Seamless integration with server-rendered templates
In order to maintain a minimal pageload footprint while still providing a DRY solution for icon usage, SVGs are copied directly from lucide.dev and svgl.app and pasted into their own templ component as needed.
Consider PocketHost.
MIT
