Construction / GIS / Project Management

Kronos

A multi-tenant geospatial project management platform for construction site documentation, featuring interactive mapping, timeline visualization, and capture workflows.

Client: Tride Digital d.o.o.
Year: 2025
Kronos

Services

Custom Web ApplicationsUI/UX EngineeringTechnical Strategy

Tech Stack

React 19TypeScriptDjango 5.0GeoDjangoPostgreSQL + PostGISTailwind CSS v4MapLibre GL JSTiTilerCelery + RedisSupabase AuthStripeDocker

The Challenge

Construction teams face significant hurdles in managing site documentation effectively:

  • Lack of geospatial context: Traditional project management tools don't integrate geographic information, making it difficult to associate photos, issues, and milestones with specific locations on a site
  • Fragmented timeline tracking: No way to visualize how a project evolves over time through aerial imagery, photos, and milestone completions
  • External stakeholder friction: Subcontractors and field workers need simple ways to upload evidence photos without creating accounts or learning complex software
  • Disconnected issue management: Defects and quality issues get lost without geographic pinpointing and proper evidence collection workflows

Our Approach

We designed Kronos as a comprehensive platform combining geospatial intelligence with intuitive project management:

  • Geospatial-first architecture: Built on PostGIS and GeoDjango with Cloud Optimized GeoTIFF (COG) support, enabling high-performance map rendering through TiTiler
  • Event-driven backend: Implemented a transactional outbox pattern for reliable, decoupled event delivery across the system
  • Polymorphic resource model: Designed a Class Table Inheritance pattern supporting 7+ resource types (maps, media, features, milestones, documents) with a unified query interface
  • Multi-tenant isolation: Complete organization-level data separation with role-based access control, custom quotas, and admin impersonation for support
  • Capture link system: Secure, tokenized upload links deliverable via SMS/WhatsApp for external stakeholder photo collection

Key Features

  • Interactive Mapping Workspace: Layer management, boundary editing, resource pins, and severity-coded issue markers with MapLibre GL JS
  • Timeline Visualization: Watch projects evolve over time with playback controls (1x-30x speed), zoomable lanes, and minimap navigation
  • Capture Workflows: Generate time-limited, geofenced upload links for external users—no authentication required
  • Issue Tracking: Geographic-aware defect management with severity levels, evidence collection, and activity logging
  • Review Workflows: Batch approval/rejection of uploaded photos with per-item decision tracking
  • Resource Library: Centralized asset management with SHA-256 deduplication, soft delete, and rich audit trails
  • Smart Tags: Hierarchical, color-coded tagging system with custom icons and bulk operations
  • Multi-Channel Notifications: In-app and email notifications with deep linking to related entities

Results

Platform capabilities delivered:

  • 326+ React components with full TypeScript coverage
  • 43 API ViewSets powering a comprehensive REST API
  • 7 polymorphic resource types unified under a single query interface
  • 38 custom UI components (no external component library dependencies)
  • 23 modular CSS files refactored from a 2,470-line monolith

Technical Architecture

A modern full-stack architecture optimized for geospatial workloads and real-time collaboration:

| Layer | Technologies | |-------|-------------| | Frontend | React 19, TypeScript, Vite, Tailwind CSS v4, MapLibre GL JS, Zustand, React Query, React Router 7 | | Backend | Django 5.0, Django REST Framework, GeoDjango, Celery, Redis | | Database | PostgreSQL 16 with PostGIS 3.4 for spatial queries | | Infrastructure | Docker, TiTiler (COG tile serving), MinIO/Cloudflare R2 (S3-compatible storage) | | Integrations | Supabase Auth, Stripe (payments), Twilio (SMS/WhatsApp), Resend (email) |

Technical Highlights

Event-Driven Architecture: Transactional outbox pattern ensures no events are lost during processing. Events are written to the database in the same transaction as business data, then asynchronously dispatched via Celery workers with retry logic and dead-letter queuing.

Geospatial Pipeline: User uploads flow through GDAL/Rasterio processing into Cloud Optimized GeoTIFFs, stored in S3-compatible storage, then served as XYZ tiles through TiTiler to MapLibre GL JS on the frontend.

Class Table Inheritance: A polymorphic resource model allows unified queries across all resource types while maintaining type-specific extensions—enabling features like Resource.objects.maps() alongside Resource.objects.all().

Screenshots

Kronos screenshot 1
Kronos screenshot 2
Kronos screenshot 3