feat: skin engine + Twenty CRM theme for iistwin

- Add client/src/themes/ with tokens, built-in skins (iistwin, twenty, omegaprom)
- Add ThemeProvider with data-skin/data-theme and runtime CSS for custom skins
- Add npm run skins:generate script for build-time CSS generation
- Add organization_skins table, migration and CRUD API
- Add activeSkinId to organizations and expose it in /api/auth/me
- Add skin switcher in /profile and admin skin editor in /settings/appearance
- Adapt index.css hardcoded colors to skin tokens
- Update AGENTS.md and Obsidian notes
This commit is contained in:
2026-07-09 20:25:49 +03:00
parent 7ed89f7f97
commit 95279b8fcc
24 changed files with 2562 additions and 223 deletions

View File

@@ -36,6 +36,7 @@ import formAccessRouter from "./form-access.routes";
import formOfflineRouter from "./form-offline.routes";
import { calendarRouter } from "./calendar.routes";
import { ganttRouter } from "./gantt.routes";
import organizationSkinsRouter from "./organization-skins.routes";
import { registerSyncRoutes } from "./sync.routes";
import { FIELD_TYPE_DEFINITIONS } from "../../shared/field-types";
export { publishNotificationSSE };
@@ -110,6 +111,7 @@ export async function registerRoutes(app: Express): Promise<Server> {
app.use(formOfflineRouter);
app.use(calendarRouter);
app.use(ganttRouter);
app.use(organizationSkinsRouter);
registerSyncRoutes(app);
const httpServer = createServer(app);