Skip to main content

Tenlord

Full-stack|PropTech / landlord compliance

TLDR

UK landlord SaaS for properties, compliance documents, reminders, and billing. Next.js clients, ASP.NET API on a VPS, serverless functions for async work, Postgres, payment provider, message bus.

Context. Landlords need a reliable place to track legal deadlines, documents, tenants, and payments, including billing edge cases and reminder schedules.

Next.jsNext.jsASP.NET CorePostgresEF Coreserverless functionsmessage buspayment providerobject storageDockerDockerAnalyticsFeature flagsMonitoringObservability

Architecture

System diagram

Tenlord architecture diagram

Component map

As deployed

Clients
Next.js

Landlord / tenant web

Next.js 16

Next.js

Admin app

Next.js

Application

Tenlord API

ASP.NET Core on Docker / VPS

serverless functions

Payments, email, SMS, timers

Platform

message bus

notifications topic

object storage

Documents and media

PostgreSQL

EF Core

External

payment provider

Subscriptions

LLM provider

Compliance insights

What shipped

  • Clean Architecture with Domain, Infrastructure, Shared, API, and Functions projects
  • Vertical-slice handlers under api/v1 instead of a thick Application layer
  • Landlord-scoped data model: Property to Unit to Occupant / Tenant
  • Payment provider freemium plans with idempotent webhook processing
  • Email, SMS, and payment side effects moved onto message bus consumers
  • Product analytics and feature flags for gradual rollout and behaviour insight
  • Monitoring and observability across API, workers, and dependency health

Backend

  • REST under api/v1 for auth, properties, units, documents, maintenance, messaging, dashboard, and admin
  • JWT roles plus per-handler plan checks for freemium limits
  • EF Core and Postgres for subscriptions, compliance cache, audit, and payment event dedupe
  • IMemCache today, with a clear path to Redis if the API scales out
  • LLM provider compliance analysis cached in the database to avoid repeat spend
  • Structured logs, metrics, and traces for latency, failure modes, and queue lag

Request and event flow

  1. 01Landlord starts payment checkout from the API
  2. 02Payment provider posts to the payment webhook endpoint
  3. 03checkout.session.completed is published to the message bus
  4. 04PaymentProcessor Function applies the subscription in a transaction
  5. 05Confirmation email is queued and sent by a notification Function
  6. 06Timers send daily compliance reminders and verification nudges

API domains

  • Auth and users
  • Properties and units
  • Documents and compliance
  • Maintenance
  • Messaging
  • Payments and payment provider webhooks
  • Admin

Key decisions

  • Next.js for client shells with clear data boundaries; compliance and domain reads stay on the ASP.NET API.
  • Keep the HTTP path on the API. Put mail, SMS, and payment apply on serverless functions so retries sit with Azure.
  • Verify payment provider webhooks, then process checkout completion through the message bus with processed payment event records for idempotency.
  • Cache LLM provider compliance results in Postgres by property and input fingerprint to avoid repeat model calls.
  • Use IMemCache for hot landlord reads now, with a clear swap path to Redis if the API scales beyond one instance.
  • Run the API in Docker on a VPS for cost control. Keep serverless functions on Azure Flex Consumption for async and scheduled work.
  • Ship analytics and feature flags early so product changes can be measured and rolled out safely.
  • Treat monitoring and observability as part of the platform: health checks, metrics, and traces on API and workers.

Availability

Open to opportunities

Open to senior product engineer roles with real ownership across the stack. Security-minded by default.

UK-based · Remote / hybrid · Permanent or contract