Workflow-App/Workflow/app/tasks/columns.ts
sjcoetzeesj-coder 11d0178ab1 feat: commit Workflow app source; move CIPC credentials to env
Adds the full Next.js app (app/, components/, lib/, scripts/, assets/,
docs/, Dockerfile, compose, configs) to version control.

Security:
- CIPC BizPortal customer-code logins (Login 1 + Login 3) now read
  CIPC_LOGIN1_CODE / CIPC_LOGIN1_PASSWORD / CIPC_LOGIN3_CODE /
  CIPC_LOGIN3_PASSWORD from .env.local instead of source.
- BizPortal personal login in apply-bizportal route reads
  BIZPORTAL_ID_NO / BIZPORTAL_PASSWORD.
- Added .env.example as the committed template.

.gitignore excludes .env*, node_modules, .next, logs, sqlite, Playwright
storage_state.json (live CIPC cookies), scratch dirs, client PDFs and
debug screenshots.
2026-10-18 15:21:45 +02:00

57 lines
2.5 KiB
TypeScript

// app/tasks/columns.ts
// Column definitions for the Kanban. Status → display config.
export type TaskStatus = "backlog" | "ready" | "in_progress" | "blocked" | "done" | "failed";
export type TaskPriority = "low" | "normal" | "high" | "urgent";
export type TaskType = "bizportal_search" | "bizportal_reserve" | "pdf_generate" | "email_send" | "custom";
export const COLUMNS: { id: TaskStatus; title: string; hint: string; accent: string }[] = [
{ id: "backlog", title: "Backlog", hint: "Not yet ready", accent: "border-border" },
{ id: "ready", title: "Ready", hint: "Agent can pick up", accent: "border-blue-300" },
{ id: "in_progress", title: "In Progress", hint: "Agent is working", accent: "border-amber-300" },
{ id: "blocked", title: "Blocked", hint: "Needs human input", accent: "border-red-300" },
{ id: "done", title: "Done", hint: "Completed", accent: "border-green-300" },
{ id: "failed", title: "Failed", hint: "Error — retry or discard", accent: "border-red-400" },
];
export const PRIORITY_COLORS: Record<TaskPriority, string> = {
low: "bg-gray-100 text-gray-700 border-gray-200",
normal: "bg-blue-50 text-blue-700 border-blue-200",
high: "bg-amber-100 text-amber-800 border-amber-300",
urgent: "bg-red-100 text-red-800 border-red-300",
};
export const TASK_TYPE_META: Record<TaskType, { label: string; icon: string; tone: string }> = {
bizportal_search: { label: "BizPortal · search", icon: "🔍", tone: "bg-emerald-50 text-emerald-800 border-emerald-200" },
bizportal_reserve: { label: "BizPortal · reserve", icon: "📝", tone: "bg-emerald-50 text-emerald-800 border-emerald-200" },
pdf_generate: { label: "PDF · generate", icon: "📄", tone: "bg-violet-50 text-violet-800 border-violet-200" },
email_send: { label: "Email · send", icon: "✉️", tone: "bg-sky-50 text-sky-800 border-sky-200" },
custom: { label: "Custom", icon: "🧩", tone: "bg-slate-50 text-slate-800 border-slate-200" },
};
export const TASK_TYPE_LABEL: Record<TaskType, string> = {
bizportal_search: "BizPortal search",
bizportal_reserve: "BizPortal name reservation",
pdf_generate: "PDF generation",
email_send: "Email send",
custom: "Custom task",
};
export const PRIORITY_LABEL: Record<TaskPriority, string> = {
low: "Low",
normal: "Normal",
high: "High",
urgent: "Urgent",
};
export const STATUS_LABEL: Record<TaskStatus, string> = {
backlog: "Backlog",
ready: "Ready",
in_progress: "In Progress",
blocked: "Blocked",
done: "Done",
failed: "Failed",
};
// 7 days in done auto-collapse
export const DONE_COLLAPSE_DAYS = 7;