Overall architecture
The AIMY system consists of three independent projects in the same workspace (not a monorepo with shared tooling): Topi, Tuke, Tux.
Three projects
Topi — Admin Portal (legacy)
Status: Maintenance Mode (limited core changes).
| Stack | React 16.x, UmiJS v2, DvaJS (Redux wrapper), Ant Design 3.x |
| Architecture | Flux pattern — centralized state in src/models (Dva effects/reducers) |
| Structure | Feature-based: src/pages/[Feature] (each feature has models/, components/, services/) |
| Styling | LESS Module |
| Rules | Do not upgrade libraries (Antd/React) to avoid breaking changes; component files use PascalCase |
| Local port | 5008 |
Tuke — Modern Web App
Status: Active Development (new end-user interface).
| Stack | Next.js 14+ (App Router), TypeScript, Tailwind CSS 3.x |
| Routing | File-system routing in app/ |
| State | Zustand for global client state |
| Data fetching | Server-side fetching or client-side hooks |
| Rules | Prefer Tailwind utilities; components in src/components; strict TS, no any |
| Local port | 3000 |
Tux — Backend Core Platform
Status: Core logic & API. This is where most "internal flows" described by this wiki live.
| Stack | .NET 8, ASP.NET Core, EF Core, Azure Functions (Workers) |
| Architecture | DDD + Clean Architecture |
| Local port | 5003 (Swagger: http://localhost:5003/swagger) |
Tux layers:
Tux conventions:
- 100% Dependency Injection; interfaces start with
I(IUserService); async methods end withAsync. - Do not access
DbContextdirectly from Controller — go through Service/Repository. - Workers (Azure Functions) handle async work: sending email, reports, sync, EntityEvent processing.
How they fit: where a request goes
This is why users see an immediate response while email/history happen in the background — see Platform to understand Workers.
Related notes worth remembering
- Topi/Tuke use npm; projects are independent and there is no root
package.json. This wiki (VitePress) uses pnpm, and is another separate Node project under/wiki. - Production deploys for the apps use Azure Pipelines (not Cloudflare). This wiki alone deploys to Cloudflare Pages.
Next: Database & storage.