Listings visible after subscription lapses
Central subscription eligibility checks injected into all public search and catalog queries.
Case study
Local Business Discovery Platform
deskon.in
Product preview
Architected Deskon — a subscription-gated local business platform with a NestJS API, dual Next.js apps for discovery and operations, PostgreSQL, Redis caching and background queues, cloud media storage, and a listing eligibility engine with profile scoring, government verification workflows, and city-scoped role-based access.
Problem & goal
Local consumers struggle to discover verified nearby businesses with comparable services and products. Shop owners need a single portal to publish listings, manage catalogs, handle enquiries, and stay visible only while subscribed — without building separate websites or ad-hoc directories.
Deskon operates a three-sided marketplace: consumers browse, search, compare, and enquire; shop owners manage businesses, services, products, verifications, and subscriptions; platform admins and field operations staff govern catalog quality, plans, and city-scoped access.
Target users
Consumers — search and browse by location or category, compare products, save favourites, submit enquiries, and leave reviews
Shop owners — business profiles, media, services and products, verifications, analytics, and call-to-action tracking
Admins — user management, plans, subscriptions, verifications, roles and permissions, and platform analytics
Managers and staff — city- or allocation-scoped oversight of shop owners and listings
Core capabilities
Secure login with Google OAuth, role-based permissions, and granular access for admins, managers, staff, and shop owners.
Rich business listings with media, scoring, status workflows, and owner-managed catalog content.
Services, products, brands, and hierarchical categories with side-by-side product comparison.
Search with geo and category filters, backed by database queries and in-memory caching for repeat lookups.
Plan management and active-subscription gating so only paying businesses appear in the public catalog.
GST, MSME, and FSSAI verification workflow with admin review and background processing.
Lead capture for consumers, review moderation, and owner-facing enquiry management.
Event tracking, call-to-action click analytics, business dashboards, and multi-channel notifications via email, SMS, and push.
City-scoped manager access and staff-to-shop-owner mapping for regional operations.
Dedicated admin console for platform operations, separate from the customer-facing discovery app.
High-level design
The platform ships as three deployable applications sharing one backend contract: a Next.js customer app for public discovery and shop-owner portals, a Next.js control panel for admin and field operations, and a NestJS API on a high-performance HTTP adapter handling versioned REST endpoints, validation, and role guards. PostgreSQL stores relational business data with TypeORM. Redis powers search caching and background job queues for email and verification processing.
External integrations include object storage for photos and videos, transactional email, Firebase push notifications, and SMS delivery. Subscription-gated listing rules and contact privacy for anonymous users are enforced server-side on every public query. Role-based admin controls and encrypted credential storage protect sensitive operations.
Production stack
Find businesses locally
Consumers filter by query text, city, geo radius, category, and rating. Search runs against PostgreSQL with subscription eligibility applied on every public result so expired listings never surface. Identical filter combinations are served from an in-memory cache with versioned namespaces for safe invalidation when listing rules change. Contact details such as phone numbers, messaging links, and coordinates are withheld from anonymous users until they authenticate.
Trust and visibility
Weighted scoring across profile completeness, verification status, reviews, and recent activity to surface higher-quality listings.
A single eligibility rule reused across businesses, services, and products ensures only active subscribers appear in consumer search.
Side-by-side property matrices let consumers compare products before submitting an enquiry.
View and search events tracked with throttling to power business dashboards without duplicate noise.
City-scoped access
Admins have full platform access. Managers see shop owners and listings only in their assigned cities. Staff support explicitly allocated shop owners without visibility into national data. Shop owners manage their own businesses. Consumers and anonymous visitors see the public catalog with contact privacy applied. Regional managers can approve verifications and monitor listings within their territory without exposing data from other cities.
External services
Cloud object storage with optional CDN delivery for business photos and video uploads.
Transactional email queued through background workers for verification, subscription, and enquiry events.
Firebase-powered mobile push for time-sensitive owner and admin alerts.
Configurable SMS delivery for key notification events alongside email and push.
Challenges solved
Central subscription eligibility checks injected into all public search and catalog queries.
Server-side contact masking on public API responses until the user authenticates.
In-memory cache keyed by filter parameters with versioned namespaces for safe rule updates.
City-scoped allocations so managers and staff only see businesses in their assigned regions.
High-throughput multipart handling with cloud object storage offloading media from app servers.
Background job queues and scheduled renewal checks for GST, MSME, and FSSAI workflows.
Weighted profile scoring that incentivizes complete profiles, verifications, and active engagement.
Built for production load
In-memory search cache avoids repeated heavy database joins for identical filters
Cache namespace versioning enables safe invalidation when listing rules change
Pagination on admin lists, search results, and enquiries
Analytics view throttling reduces duplicate tracking events per session
Background workers scale email and verification jobs independently of the API
Stateless API supports horizontal scaling behind a reverse proxy
Selective relation loading keeps detail pages efficient
Operations
The production stack runs in Docker containers — database, cache, API, customer app, control panel, and reverse proxy — with automated TLS certificates. Scheduled database backups and structured log rotation support ongoing operations. Health checks on core services ensure reliable uptime for the discovery platform.
Roadmap
Self-serve subscription payments and auto-renew
Live government API integration for GST, MSME, and FSSAI verification
Campaigns backend for featured placement and promotional budgets
Advanced search engine if catalog scale outgrows database full-text search
WhatsApp enquiry notifications for shop owners
Consumer mobile app consuming the same versioned API