FieldSync is an MVP web app for photographers and field crews who want painless geo-linked session management without extra hardware. It combines a marketing site, in-browser workspace, mobile logger, and account settings in a unified React Router project backed by Firebase.
- Core experience
- Product design language
- Architecture overview
- Firebase integration
- Local development
- Project structure
- Roadmap ideas
- Hero positions FieldSync as the link between camera file numbers and phone GPS data.
- Features highlight phone anchors, quick number capture, and desk-side matching.
- Capture section links directly to the on-the-go logger for one-tap bookmarking.
- Map-inspired hero preview visualises the planned desktop experience.
- Dashboard cards summarise imported photos, phone-saved locations, total logs, and cameras.
- Photo list surfaces basic EXIF data and reveals whether a field location exists.
- Detail panel renders a stylised mini-map and metadata for the selected photo.
- Camera and location log summaries reinforce how IDs and GPS entries stay aligned.
- Mobile-first UI for logging the trailing digits from a camera filename alongside live GPS.
- Stores entries locally (with Firebase sync planned) to keep the latest anchor fix.
- Highlights the current anchor and saved history so photographers feel confident on location.
- Profile card captures name, email, timezone for future exports and team features.
- Camera manager records body IDs, serials, and lenses—assignment is flagged as “coming soon.”
- Team directory keeps track of crew members for upcoming collaboration upgrades.
- Visual tone: Clean, modern SaaS aesthetic using layered gradients and soft cards.
- Colour system: Sky blues and emerald greens for primary actions; slate grays for typography.
- Typography: Inter (Google Fonts) for a professional yet approachable voice.
- Component motifs:
- Rounded rectangles with subtle borders and gentle drop shadows.
- Pill buttons with slight lift (
translate-y) on hover for tactile feedback. - Stat rows and chips that rely on tonal backgrounds rather than heavy outlines.
- Dark mode: Landing page supports dark theme via Tailwind; app screens currently target light mode.
- Framework: React Router v7 using the app-directory structure.
- Language: TypeScript end-to-end.
- Styling: Tailwind CSS 4 with theme tokens defined in
app/app.css. - State: Local state in each route for MVP; Firebase will replace mock arrays.
- Firebase client:
app/firebase/client.tsexposesgetFirebaseApp()andgetFirebaseAnalytics()with lazy init and SSR guards. - Routing:
app/routes/home.tsxrenders the landing page via theWelcomecomponent.app/routes/app.tsxpowers the workspace dashboard.app/routes/app.otg.tsxdelivers the on-the-go capture flow.app/routes/app.settings.tsxhandles account and camera settings.
// app/firebase/client.ts
const firebaseConfig = {
apiKey: "AIza...",
authDomain: "fieldsync-48024.firebaseapp.com",
projectId: "fieldsync-48024",
storageBucket: "fieldsync-48024.firebasestorage.app",
messagingSenderId: "1034685391254",
appId: "1:1034685391254:web:bff6b586315bb927f1bdb7",
measurementId: "G-SWSEV3L1P6",
};
export function getFirebaseApp(): FirebaseApp {
if (!appInstance) {
appInstance = initializeApp(firebaseConfig);
}
return appInstance;
}- Config is inline for rapid prototyping; move to environment variables before production.
getFirebaseAnalytics()checksisSupported()to avoid SSR or unsupported browser crashes.- Next steps: replace in-memory data in
/app,/app/otg, and/app/settingswith Firestore (or Realtime Database) collections.
npm install # install dependencies, including Firebase SDK
npm run dev # start the Vite dev server
npm run typecheck # ensure TypeScript types are sound
npm run build # compile client + server bundlesThe dev server runs at http://localhost:5173 with hot module reload enabled.
app/
app.css # Tailwind theme setup
firebase/client.ts # Firebase bootstrap helper
routes/
home.tsx # Landing page
app.tsx # Session workspace
app.otg.tsx # On-the-go capture
app.settings.tsx # Account settings
welcome/welcome.tsx # Landing page UI
public/ # Static assets
README.md # This document
- Persist photos, cameras, and anchors to Firestore for collaborative sync.
- Introduce Firebase Auth for multi-user workspaces.
- Replace the illustrative mini-map with a live map widget (Mapbox, Google Maps, MapLibre, etc.).
- Capture analytics events via Firebase once real usage patterns emerge.
- Build an offline-first sync between
/app/otgand desktop using IndexedDB + Firebase.
Built with ❤️ using React Router, Tailwind CSS, and Firebase.