Building for Production
Meelio supports multiple build targets: a web application and browser extensions for various platforms. This guide covers the build process for all targets.Prerequisites
Requirements:
- Node.js >= 22.0.0
- pnpm 9.15.4
- All dependencies installed (
pnpm install)
Build Commands
Building Everything
Building Specific Apps
Web App Build Process
Build Output
The production build is created in
apps/web/dist/:- Optimized JavaScript bundles
- Minified CSS
- Static assets
- Service worker (PWA support via vite-plugin-pwa)
Preview Build (Optional)
Web App Build Configuration
The web app uses Vite with these plugins:@vitejs/plugin-react-swc- Fast React refresh with SWCvite-plugin-pwa- Progressive Web App supportvite-plugin-compression- Gzip compressionvite-plugin-static-copy- Copy static files
Extension Build Process
Building for Specific Browsers
Meelio supports multiple browser targets:Building for All Browsers
Packaging Extensions
After building, you can package extensions into distributable formats (ZIP files) for store submission.Build Outputs and Artifacts
Directory Structure After Build
What Gets Built
Web App (apps/web/dist/):
- Optimized JavaScript bundles with code splitting
- Minified CSS with Tailwind optimizations
- Service worker for offline support
- Static assets (images, fonts, sounds)
- PWA manifest
apps/extension/build/):
- Manifest v3 JSON file with permissions
- Background service worker
- Content scripts
- Popup HTML and scripts
- New tab page
- Extension icons and assets
Environment Variables
Meelio supports environment-specific configuration through.env files.
Creating Environment Files
Environment Variables in Builds
Turborepo automatically includes.env* files as build inputs (see turbo.json):
Accessing Variables
In Vite (Web App):Extension Manifest Configuration
The extension manifest is defined inapps/extension/package.json:
Key Permissions
storage- Required for local data storagenotifications- For timer and task notificationstabs(optional) - Tab management featurestabGroups(optional) - Tab organizationbookmarks(optional) - Bookmark management
Loading Built Extension Locally
After building the extension, you can load it in your browser for testing:Open Browser Extensions Page
Navigate to:
- Chrome:
chrome://extensions - Edge:
edge://extensions - Firefox:
about:debugging#/runtime/this-firefox
Load Unpacked Extension
Click “Load unpacked” and select:(Or the appropriate browser build directory)
For Firefox, use “Load Temporary Add-on” and select the
manifest.json file from the build directory.Cleaning Build Artifacts
Remove all build outputs and caches:dist/directoriesbuild/directories.turbo/cache.plasmo/cachenode_modules/(extension clean script)
Build Optimization Tips
Faster Builds:
- Use
pnpm build:weborpnpm build:extensionto build only what you need - Turborepo caches builds - subsequent builds are much faster
- Use
pnpm devduring development instead of repeated builds
Turborepo Caching
Turborepo automatically caches build outputs. Builds are only re-run when:- Source code changes
- Dependencies change
- Environment variables change (
.env*files) - Build configuration changes
Parallel Builds
When building multiple packages, Turborepo builds them in parallel when possible, respecting dependency order.Troubleshooting Builds
Build Fails
Extension Not Loading
- Ensure you selected the correct
build/{browser}-mv3-proddirectory - Check browser console for errors
- Verify all permissions in manifest are granted
- Try rebuilding:
pnpm build:extension
Build Output Missing
- Check for TypeScript errors:
pnpm lint - Ensure all dependencies are installed
- Look for error messages in build output
Next Steps
- Testing - Learn how to test your builds
- Contributing - Guidelines for contributing code