Sync browser tabs across devices and open them from a web dashboard.
- Dashboard — React app deployed on AWS Amplify (
dashboard/) - Extension — Chrome (MV3) and Firefox (MV2) via WXT (
extension/)
Live dashboard: https://tabsync.rebase.ti.trilogy.com/
| Path | Purpose |
|---|---|
dashboard/ |
Web UI + /get landing page (public/landing.html) |
extension/ |
Browser extension source |
amplify.yaml |
Amplify build spec (appRoot: dashboard) |
Amplify only builds dashboard/. Pushes that touch only extension/ do not change the hosted site unless Amplify is configured to build on every push (default).
Set in the Amplify console (same Supabase project as the extension):
| Variable | Required |
|---|---|
VITE_SUPABASE_URL |
Yes |
VITE_SUPABASE_ANON_KEY |
Yes |
VITE_ADMIN_PASSWORD |
For /admin |
VITE_SUPABASE_SERVICE_KEY |
For /admin |
Local dev: copy dashboard/.env.example → dashboard/.env.local.
If /get or client routes break after a fresh app setup, ensure Rewrites and redirects include:
/get→/landing.html(200 rewrite)- SPA fallback →
/index.html(200 rewrite), excluding static assets
These were previously defined in dashboard/vercel.json for Vercel; Amplify uses console rules (not amplify.yaml).
cd dashboard
npm ci
npm run buildDo not commit extension/.env (contains secrets). Use extension/.env.example as a template.
cd extension
cp .env.example .env # then fill in Supabase values
npm ci
npm run package:releaseRelease zips are written to extension/release/ (gitignored):
chrome-mv3.zip— GitHub Releases / Chromiumtabsync-firefox-<version>.zip— Mozilla AMO upload (signed.xpireturned after review)
After building, upload assets from extension/release/:
chrome-mv3.zip- Signed Firefox
.xpi(e.g.TabSync-1.0.1.xpi) once AMO approves
**/.env,**/.env.local(except*.env.example)extension/.output/,extension/release/dashboard/dist/,node_modules/