PickYourTrail CRM — Plato
Internal Platform
The operating system for PickYourTrail. Sales, finance, operations, chat, dialer, bookings, visa, HR, allocations, and reporting: all in one platform. Built the original system, then led the architectural rewrite.
The first version was a Laravel monolith with a Next.js frontend: 30+ page modules covering every operational domain. The rewrite moved to a CQRS approach where the database schema is the single source of truth: one schema file generates the GraphQL API types, validation schemas, ORM models, and documentation automatically. The platform also includes an in-house no-code flow engine with a visual builder, versioned rule sets, and a trigger/action system. AI is embedded operationally: call scoring, chat summarisation, conversation context tracking, and stage prediction. A key subsystem is the lead allocation engine (see below).
LaravelNext.jsGraphQLPrismaTemporalTurborepoSockudoTypesenseKubernetes
Lead allocation engine
Internal Platform
A rule-based lead routing system that automatically assigns incoming customers to the right sales, operations, visa, and on-trip agents based on destination, customer profile, language, and agent availability — in real time, at scale.
Rules are prioritised and matched against customer and trip attributes — departure city, destination, channel, repeat status, and others. Conditions support both exact values and numeric comparisons. Each rule points to a team (or team group) of agents and can jump to the next rule when that team is fully occupied, or fall back to a secondary team. Before assigning, the engine checks several layers in sequence: roster availability for the day, concurrent lead cap, monthly and weekly capacity limits, and a rolling time window that prevents any agent from being over-allocated in a short burst. Rate limiting thresholds can be overridden per destination region. Customer language is matched to agent language capability. Returning customers are routed back to their previous agent where possible, or to a dedicated repeat-customer pool. Every allocation runs as a background job with overlap prevention so concurrent requests for the same customer can't race each other, with exponential backoff retry on failure. All decisions are logged with a full step-by-step trace for debugging and auditing. Five types: Sales Owner, Account Owner, Booking Executive, Visa Owner, On-Trip Owner.
Laravel queue jobsPriority rule engineMulti-layer capacity managementRolling window rate limitingLanguage matchingFull audit trailDry-run mode
Real-time chat platform
Product
A full internal chat system for PickYourTrail, used by sales, operations, and customer support teams to communicate with customers and each other. Built as a complete product: backend, web UI, and a mobile SDK consumed across multiple apps.
The backend handles real-time presence, typing indicators, message receipts, read tracking, chat assignment, and ownership routing. AI layers run over conversations to generate summaries and track response-time metrics. The web interface supports canned responses, file uploads, AI tone suggestions, per-conversation context panels, and agent metrics. For mobile, this is packaged as a standalone SDK that embeds in the host app without requiring changes to navigation — an imperative API that opens the chat surface on demand. The same SDK ships across the consumer app and enterprise travel app. WhatsApp conversations flow into the same system via a self-hosted gateway.
LaravelSockudoReactReact Native SDKAI summarisationWhatsApp integration
AI trip planning system
AI Platform
Multi-service AI system for travel planning. A coordinating AI agent breaks down a trip request and delegates to specialists: hotels, flights, activities, costing, and more. Results stream to the user in real time as each specialist completes its part.
The same capabilities are also exposed as an MCP tool server — 17 tool modules covering the full booking lifecycle from city discovery through payment. This means the planning system can be used by any AI client, including Claude Desktop. The orchestrator signals workflow transitions through structured output fields rather than through natural language instructions to the runtime — which keeps phase routing predictable regardless of how the LLM phrases things. The entire system is instrumented for observability: request tracing, database calls, queue tasks, and HTTP calls are all tracked and visible in dashboards.
FastAPICeleryCrewAILangChainMCPpgvectorOpenTelemetrySSE streaming
Algorithmic trading engine
Personal · Live
Fully autonomous F&O trading system, running live with real capital. 61 strategies across NIFTY, BANKNIFTY, and SENSEX, with automated position sizing, trailing stops, partial profit takes, and portfolio-level risk limits. Built and maintained entirely outside of work.
An AI-assisted end-of-day workflow runs simulations against the day's production data, varies strategy parameters across a range, and produces ranked recommendations. The final call stays with the human. The engine runs as concurrent async loops (one per instrument group) with a fast position monitor running independently of the slower signal generation loop. The codebase has a strict testing mandate and an architecture document that doubles as a living decision record with numbered safety rules.
Python asyncioFastAPISQLAlchemy asyncRedisLiteLLMPydanticstructlog
Local developer runtime manager
Developer Tooling
macOS-native local environment manager for Apple Silicon. Manages Postgres, Redis, PHP, Node, MinIO, Typesense, and Mailpit without Docker Desktop. A background service handles the runtime state; the desktop app is a control panel over it.
Every project automatically gets a *.test domain with valid HTTPS through a combination of local DNS resolution and auto-issued development certificates — no manual hosts file edits. Runtimes are installed from cryptographically signed manifests. The separation between the background service (which owns all state, process supervision, database persistence, and routing) and the UI (which is stateless) means the UI can be replaced or extended without touching the runtime logic. Ships with macOS system integrations: tray menu, native notifications, launch-at-login, and in-app updates.
Go daemonTauri + RustReact + ViteSQLiteTraefikmkcert