Housing-company sites (multi-tenant)
Two Tyumen housing-management company sites rebuilt from DotNetNuke 8 into one multi-tenant Next.js codebase with full content migration
Replaces two aging DotNetNuke 8 portals of Tyumen property-management companies with a single Next.js 15 application that picks the tenant by host header and renders each with its own theme.

Replaces two aging DotNetNuke 8 portals of Tyumen property-management companies with a single Next.js 15 application that picks the tenant by host header and renders each with its own theme.
Includes an admin panel (pages, news, house list, banners, resident appeals, files, users) with a TipTap rich-text editor, and a migration toolchain that restores the SQL Server backup, exports it to JSON, rewrites legacy links (including decrypting DNN's DES-encrypted LinkClick file tickets) and loads everything idempotently with 301 redirects from old URLs.
Phase 2 (resident login and meter readings) has its data imported but is not built yet.
What it does
- Multi-tenant by domain: one deployment serves yk72.ru and yk-ezhf.ru with separate themes, menus and content
- Admin panel: pages, news, houses (house cards), blocks/banners, appeals inbox, file manager with upload API, settings, users
- TipTap editor with tables, images and alignment
- Page kinds: regular, news feed, house list, appeals form (DB + e-mail via SMTP), meters (phase 2)
- DNN 8 migration: SQL Server backup restore in Docker, JSON export, DES decryption of LinkClick fileticket links keyed by portal GUID, missing-file report, idempotent import
- Legacy URL redirects (/Список-домов/..., /Portals/33/..., ViewFullNews) to new slugs
- Legacy ASP.NET Membership password hashes preserved for future resident login re-hash to bcrypt
- Multi-stage Docker build with standalone Next output and persistent /data volume
Real client work for two operating companies; multi-tenant Next.js from a single codebase; non-trivial legacy migration including reverse-engineering DNN's encrypted file-ticket scheme and ASP.NET Membership hashes; built in a single day. The 'modern' screenshots show a redesigned hero page — confirm which design is final before showcasing.
Gallery

Want something like this?
I build it live on a Zoom call, you watch the screen, the timer stops when you say stop. First 15 minutes are free.