← All work
Real Estate · Property Management · Milwaukee2026

Atomic Properties

A property management company with a tenant portal that actually works.

Visit Live Site

Overview

Milwaukee property management operator needed more than a brochure site — they needed a tenant portal, an admin dashboard, and an AI-driven onboarding flow that could absorb new tenants without burning a coordinator.

Scope of work

  • Public marketing site
  • Tenant portal (auth, payments, requests)
  • Admin dashboard for the operator
  • AI tenant onboarding flow (Claude Sonnet 4.6)
  • Square autopay + one-time payments with webhook → DB
  • PWA with push notifications

The Challenge

What we walked into.

Property management is high-friction, high-volume admin. Tenants want self-serve; operators want signal. The old setup was paper, spreadsheets, and follow-up calls — none of it scaled past a handful of doors.

The Approach

How we solved it.

Built three apps in one Next.js 16 codebase: a public site that ranks, a tenant portal with Square-powered payments, and an admin dashboard with row-level security on every table. Layered in a Claude-powered onboarding agent so new tenants get walked through the move-in flow without a human in the loop.

Outcomes

What shipped.

3 apps · 1 codebase

Public site, tenant portal, admin — shared auth and data layer

Square autopay

Rent collected automatically with webhook reconciliation

AI onboarding

Tenant move-in flow runs without staff intervention

RLS everywhere

Supabase row-level security on every table — tenants only see their data

Highlights

  • Three product surfaces (public, tenant, admin) sharing one auth + data layer
  • AI tenant onboarding powered by Claude Sonnet 4.6
  • Square autopay with webhook-driven reconciliation
  • PWA with push notifications for tenant comms

Technical stack

Next.js 16TypeScriptTailwind v4shadcn/uiSupabaseSquare APIClaude APIVercel

08 / Your project

Want a build like this?

Every SmartSite starts with a conversation. Tell us what you're building.