Calido // caleido.ai · consumer social PWA
Codebase rescue plus a flagship AI planner — shipped
Calido helps friends turn we should hang out into an actual plan — pick an activity, choose a place, invite people, and send it. The product targets the coordination friction that kills spontaneous social plans: too many messages, no agreed time, invites that disappear into chats.
When Coralsoft took over the project, the previous vendor had left behind an unfinished MVP with significant technical debt. Core flows were broken or inconsistent, integrations were half-built, and the codebase was difficult to extend. The client needed a reliable product in users' hands — without the time or budget for a full greenfield rewrite.
The product surface
Coralsoft refactored critical paths, fixed blocking bugs, aligned forms and API contracts with Zod and React Hook Form, and hardened RTK Query state so data stays in sync after mutations. On top of a stabilised foundation, we delivered six new modules — most prominently the AI hangout assistant, which returns structured content blocks (time suggestions, location cards, contact recommendations, share links) rendered as rich UI rather than a wall of text.
AI hangout assistant
Users describe what they want in natural language; the backend returns structured content blocks — time suggestions, location cards, contact recommendations, a review card and a share link — rendered as rich UI, not a text wall.
Event lifecycle
Three timing modes: now (spontaneous), later (scheduled), and find time (poll). Full create/edit/RSVP/manage flow including guest invites, comments, and post-creation guest additions.
Google Places integration
Reusable autocomplete hook with debounced search, Places Autocomplete Service, and Details API — used across event creation, AI location cards, and city suggestion flows without redundant SDK initialisation.
Push + SMS notifications
Firebase FCM for in-app messaging hooks, Web Push via a dedicated service worker with full subscription lifecycle, and SMS invite/reminder flows via backend Twilio integration.
Shareable invite links
Public web links let anyone RSVP without an account. SMS share payloads with branded invite cards — visible in iMessage previews — reduce the barrier for non-users to join.
Contacts management
Full CRUD with phone-number-based identity, international formatting via libphonenumber-js, multi-select in event creation, and AI-suggested contacts rendered with deep-link actions.



Decisions, not just dependencies.
The frontend is organised by feature domains under Next.js 15 App Router. State management uses Redux Toolkit with multiple RTK Query slices — events, AI chat, calendar, public events, auth — sharing JWT bearer headers and cache invalidation tags. This keeps server data in sync after mutations without manual refresh logic.
The AI chat layer deserves particular mention: a dedicated aiChatApi slice manages conversation state, persists history server-side, and restores threads on load — including triggering event cache invalidation when the last AI message confirms an event was created. Three environments (develop → staging → production) with CI/CD pipelines and documented rollback strategy keep the deployment cadence safe.
What was hard, and how we shipped it.
- 01
Codebase rescue without a rewrite
Refactored critical event, auth, contacts, and settings paths to eliminate regressions and mixed patterns — while shipping new features in parallel, without a greenfield restart.
- 02
End-to-end AI chat experience
Built the full frontend AI layer: chat UI, RTK Query slice, structured content block rendering (7 types including time suggestions, location cards, contact recommendations, and event review), server-side history persistence, and cache invalidation on event creation.
- 03
Notification infrastructure overhaul
A centralised NotificationService (v2) with FCM token registration, Web Push subscription lifecycle, permission state management, and guarded setup to eliminate duplicate prompts — across both push and SMS channels.
- 04
Google Places integration
Reusable debounced autocomplete hook with lazy-loaded Maps SDK — wired into event creation, AI location suggestions, city pickers, and location polling flows without redundant SDK initialisation.
- 05
Universal invite system
In-app invites, shareable web links for non-users (with guest name capture and RSVP), and SMS share payloads with rich branded previews — so an invite reaches anyone, regardless of whether they have the app installed.
Looking at a project that sits at this kind of seam?
Bring us the architecture, the constraints, and the ship date. We will bring the rest.