rebranding

This commit is contained in:
2026-05-25 22:49:37 -04:00
parent b62ab77fbe
commit 3d246af3f7
210 changed files with 1307 additions and 712 deletions

View File

@@ -1,8 +1,8 @@
# 01. Project Foundation — Root Config & Directory Cleanup
meta:
id: shieldai-unified-restructure-01
feature: shieldai-unified-restructure
id: kordant-unified-restructure-01
feature: kordant-unified-restructure
priority: P0
depends_on: []
tags: [infrastructure, cleanup, foundation]
@@ -12,7 +12,7 @@ objective:
deliverables:
- Updated root `package.json` with single workspace entry `web/`
- Updated `pnpm-workspace.yaml` to include `web/`, `iOS/ShieldAI`, `android/`, `browser-ext/`
- Updated `pnpm-workspace.yaml` to include `web/`, `iOS/Kordant`, `android/`, `browser-ext/`
- Updated `turbo.json` with tasks for web, browser-ext
- Remove or archive legacy `packages/`, `services/`, `server/` directories
- Ensure `web/` is the primary application workspace
@@ -62,4 +62,4 @@ validation:
notes:
- Do NOT delete git history. Use `git mv` where possible, or archive via `git branch archive/legacy-$(date +%Y%m%d)` before deleting.
- The `web/` directory already exists (was `redux/`) and contains a SolidStart scaffold. We build from there.
- `iOS/ShieldAI` and `android/` are native projects and do not participate in the pnpm workspace; they are tracked as sibling directories.
- `iOS/Kordant` and `android/` are native projects and do not participate in the pnpm workspace; they are tracked as sibling directories.

View File

@@ -1,14 +1,14 @@
# 02. Theme System — Auto-Shifting CSS with ShieldAI Brand Palette
# 02. Theme System — Auto-Shifting CSS with Kordant Brand Palette
meta:
id: shieldai-unified-restructure-02
feature: shieldai-unified-restructure
id: kordant-unified-restructure-02
feature: kordant-unified-restructure
priority: P0
depends_on: [shieldai-unified-restructure-01]
depends_on: [kordant-unified-restructure-01]
tags: [frontend, design-system, css, theme]
objective:
- Create a comprehensive, auto-shifting CSS theme system for the web app using Tailwind v4 `@theme` and CSS custom properties with `@property` animations, adapted from the Lendair reference but using a ShieldAI-appropriate brand palette.
- Create a comprehensive, auto-shifting CSS theme system for the web app using Tailwind v4 `@theme` and CSS custom properties with `@property` animations, adapted from the Lendair reference but using a Kordant-appropriate brand palette.
deliverables:
- `web/src/app.css` — Complete theme file with:
@@ -25,7 +25,7 @@ deliverables:
steps:
1. Copy the Lendair `app.css` structure from `~/code/Lendair/web/src/app.css` as the scaffold.
2. Replace the brand color tokens with ShieldAI palette:
2. Replace the brand color tokens with Kordant palette:
- Primary: deep indigo `#4f46e5` (brand-primary), light `#818cf8` (brand-primary-light), dark `#4338ca` (brand-primary-dark)
- Accent: electric cyan `#06b6d4` (brand-accent), light `#67e8f9` (brand-accent-light), dark `#0891b2` (brand-accent-dark)
- Alert/Danger: amber `#f59e0b` (warning), red `#ef4444` (error)
@@ -63,7 +63,7 @@ validation:
- Check computed styles for `--color-bg` and confirm it matches token values
notes:
- Reference: `~/code/Lendair/web/src/app.css` — this is the exact structure we want, just with ShieldAI colors.
- Reference: `~/code/Lendair/web/src/app.css` — this is the exact structure we want, just with Kordant colors.
- Tailwind v4 `@theme` is compile-time; changing tokens requires rebuild. Runtime theme switching uses CSS custom properties.
- The `transition` on `:root` and `body` must include `background-color` and `color` for smooth shifts.
- Consider adding a `theme-color` meta tag that updates with the theme for mobile browsers.

View File

@@ -1,14 +1,14 @@
# 03. UI Primitive Library — Button, Card, Input, Badge, Modal, Toast
meta:
id: shieldai-unified-restructure-03
feature: shieldai-unified-restructure
id: kordant-unified-restructure-03
feature: kordant-unified-restructure
priority: P0
depends_on: [shieldai-unified-restructure-01, shieldai-unified-restructure-02]
depends_on: [kordant-unified-restructure-01, kordant-unified-restructure-02]
tags: [frontend, components, design-system, solidjs]
objective:
- Build a reusable set of UI primitive components in SolidJS that match the ShieldAI theme and are used across all pages and features. These should feel cohesive with the Lendair component style but adapted for ShieldAI's security-focused brand.
- Build a reusable set of UI primitive components in SolidJS that match the Kordant theme and are used across all pages and features. These should feel cohesive with the Lendair component style but adapted for Kordant's security-focused brand.
deliverables:
- `web/src/components/ui/Button.tsx` — Variants: primary, secondary, ghost, danger. Sizes: sm, md, lg. States: disabled, loading.

View File

@@ -1,10 +1,10 @@
# 04. Layout Components — Navbar, Footer, PageContainer, AppShell
meta:
id: shieldai-unified-restructure-04
feature: shieldai-unified-restructure
id: kordant-unified-restructure-04
feature: kordant-unified-restructure
priority: P0
depends_on: [shieldai-unified-restructure-01, shieldai-unified-restructure-02, shieldai-unified-restructure-03]
depends_on: [kordant-unified-restructure-01, kordant-unified-restructure-02, kordant-unified-restructure-03]
tags: [frontend, layout, navigation, solidjs]
objective:
@@ -12,7 +12,7 @@ objective:
deliverables:
- `web/src/components/layout/Navbar.tsx` — Responsive nav with:
- ShieldAI logo/wordmark (SVG)
- Kordant logo/wordmark (SVG)
- Navigation links: Features, Pricing, Blog, Dashboard
- Auth buttons: Sign In (secondary), Get Started (primary)
- Mobile hamburger menu with slide-out drawer

View File

@@ -1,19 +1,19 @@
# 05. Landing Page — Hero Section with Animated Background
meta:
id: shieldai-unified-restructure-05
feature: shieldai-unified-restructure
id: kordant-unified-restructure-05
feature: kordant-unified-restructure
priority: P0
depends_on: [shieldai-unified-restructure-02, shieldai-unified-restructure-03, shieldai-unified-restructure-04]
depends_on: [kordant-unified-restructure-02, kordant-unified-restructure-03, kordant-unified-restructure-04]
tags: [frontend, landing-page, animation, solidjs]
objective:
- Build the hero section of the ShieldAI landing page, inspired by Lendair's landing page structure but with ShieldAI-specific content and an animated gradient/mesh background that evokes AI and security.
- Build the hero section of the Kordant landing page, inspired by Lendair's landing page structure but with Kordant-specific content and an animated gradient/mesh background that evokes AI and security.
deliverables:
- `web/src/components/landing/HeroSection.tsx` — Hero component with:
- Animated background (gradient mesh or wave effect using CSS/Canvas)
- ShieldAI logo/icon centered above headline
- Kordant logo/icon centered above headline
- Headline: "AI-Powered Identity Protection for Everyone"
- Subheadline explaining the value proposition
- Two CTAs: "Get Started" (primary) and "Learn More" (secondary ghost)
@@ -43,7 +43,7 @@ steps:
- Add subtle entrance animation (fade-in + translate-y) on mount
4. Compose in `web/src/routes/index.tsx`:
- Import `ColorWaveBackground`, `HeroSection`, `Title` from meta
- Set `<Title>ShieldAI — AI-Powered Identity Protection</Title>`
- Set `<Title>Kordant — AI-Powered Identity Protection</Title>`
- Render background first (absolute or fixed), then HeroSection with `relative z-10`
5. Verify responsive behavior: text scales down on mobile, buttons stack vertically.
@@ -54,7 +54,7 @@ steps:
- Accessibility: Verify no seizure-inducing flashes; reduced motion works
acceptance_criteria:
- [ ] Hero section displays ShieldAI headline, subheadline, and two CTAs
- [ ] Hero section displays Kordant headline, subheadline, and two CTAs
- [ ] Animated background runs smoothly without jank
- [ ] Background respects `prefers-reduced-motion`
- [ ] All text uses theme tokens and shifts correctly in dark mode

View File

@@ -1,14 +1,14 @@
# 06. Landing Page — Features, How It Works, CTA Sections
meta:
id: shieldai-unified-restructure-06
feature: shieldai-unified-restructure
id: kordant-unified-restructure-06
feature: kordant-unified-restructure
priority: P0
depends_on: [shieldai-unified-restructure-02, shieldai-unified-restructure-03, shieldai-unified-restructure-04, shieldai-unified-restructure-05]
depends_on: [kordant-unified-restructure-02, kordant-unified-restructure-03, kordant-unified-restructure-04, kordant-unified-restructure-05]
tags: [frontend, landing-page, solidjs]
objective:
- Complete the landing page by adding the remaining content sections: How It Works (step timeline), Platform Features (6-card grid), For Users split panel, Why ShieldAI value props, and a final CTA banner. These should match Lendair's section structure and visual quality.
- Complete the landing page by adding the remaining content sections: How It Works (step timeline), Platform Features (6-card grid), For Users split panel, Why Kordant value props, and a final CTA banner. These should match Lendair's section structure and visual quality.
deliverables:
- `web/src/components/landing/HowItWorksSection.tsx` — 3-step staggered timeline:
@@ -29,7 +29,7 @@ deliverables:
- Left: "For Individuals" — personal protection features
- Right: "For Families" — family group management, shared alerts
- Each panel: icon, heading, description, bullet list with checkmarks
- `web/src/components/landing/WhyShieldAISection.tsx` — 3 value prop cards:
- `web/src/components/landing/WhyKordantSection.tsx` — 3 value prop cards:
- "Proactive, Not Reactive" — detect threats before damage
- "AI-Powered Detection" — ML models trained on real scam data
- "Privacy First" — encrypted data, no selling, GDPR/CCPA compliant
@@ -52,7 +52,7 @@ steps:
4. **ForUsersSection**:
- Two-column grid with `.gradient-card` panels
- Bullet lists use `CheckIcon` component (green checkmark SVG)
5. **WhyShieldAISection**:
5. **WhyKordantSection**:
- Three cards in a row with checkmark bullet lists
- Use `.backdrop-blur-2xl` and angled clip-path like Lendair
6. **CTABannerSection**:
@@ -91,5 +91,5 @@ validation:
notes:
- Reference Lendair `~/code/Lendair/web/src/routes/index.tsx` lines 200469 for exact section structure, clip-path math, and spacing patterns.
- The `--cut` CSS variable (`clamp(16px, 2.5vw, 40px)`) controls the angle of clip-path transitions — reuse this exact pattern.
- Keep all copy ShieldAI-specific; do not leave any Lendair references (e.g., "borrow", "lend", "peer-to-peer").
- Keep all copy Kordant-specific; do not leave any Lendair references (e.g., "borrow", "lend", "peer-to-peer").
- Use the `IconPath` helper pattern from Lendair for consistent SVG sizing and stroke styling.

View File

@@ -1,14 +1,14 @@
# 07. Auth Pages — Login, Signup, Password Reset, Onboarding
meta:
id: shieldai-unified-restructure-07
feature: shieldai-unified-restructure
id: kordant-unified-restructure-07
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-03, shieldai-unified-restructure-04]
depends_on: [kordant-unified-restructure-03, kordant-unified-restructure-04]
tags: [frontend, auth, solidjs, forms]
objective:
- Create the authentication pages for the ShieldAI web app: login, signup, password reset, and a post-signup onboarding flow. These should be visually cohesive with the landing page theme and use the UI primitives.
- Create the authentication pages for the Kordant web app: login, signup, password reset, and a post-signup onboarding flow. These should be visually cohesive with the landing page theme and use the UI primitives.
deliverables:
- `web/src/routes/(auth)/login.tsx` — Login page:
@@ -34,7 +34,7 @@ deliverables:
- Step 3: Invite family members (optional)
- Step 4: Setup complete → redirect to dashboard
- `web/src/components/auth/AuthLayout.tsx` — Shared auth page wrapper:
- Split layout: left side with ShieldAI branding + testimonial, right side with form card
- Split layout: left side with Kordant branding + testimonial, right side with form card
- Responsive: stacked on mobile
- `web/src/components/auth/` — Form components: `PasswordInput.tsx` (with visibility toggle), `SocialAuthButtons.tsx`
@@ -42,7 +42,7 @@ steps:
1. Create `web/src/routes/(auth)/` directory. SolidStart file-based routing treats `(auth)` as a route group (no URL prefix).
2. Create `web/src/components/auth/` directory.
3. **AuthLayout**:
- Left panel: large ShieldAI logo, tagline, and a rotating testimonial quote
- Left panel: large Kordant logo, tagline, and a rotating testimonial quote
- Right panel: centered form card with `.gradient-card`, border, padding
- Use `PageContainer` for consistent padding
4. **Login page**:

View File

@@ -1,18 +1,18 @@
# 08. Migrate & Redesign Existing Pages — Blog, Ads, Dashboard Shell
meta:
id: shieldai-unified-restructure-08
feature: shieldai-unified-restructure
id: kordant-unified-restructure-08
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-03, shieldai-unified-restructure-04, shieldai-unified-restructure-05, shieldai-unified-restructure-06, shieldai-unified-restructure-07]
depends_on: [kordant-unified-restructure-03, kordant-unified-restructure-04, kordant-unified-restructure-05, kordant-unified-restructure-06, kordant-unified-restructure-07]
tags: [frontend, migration, redesign, solidjs]
objective:
- Port and redesign the existing pages from `packages/web` into the new unified `web/` app, applying the ShieldAI theme system, UI primitives, and layout components. Pages: Blog (list + post), Ads landing page, and Dashboard shell.
- Port and redesign the existing pages from `packages/web` into the new unified `web/` app, applying the Kordant theme system, UI primitives, and layout components. Pages: Blog (list + post), Ads landing page, and Dashboard shell.
deliverables:
- `web/src/routes/blog.tsx` — Blog listing page:
- Hero with "ShieldAI Blog" headline
- Hero with "Kordant Blog" headline
- Grid of blog post cards with cover image, title, excerpt, author, date
- Tag filter bar
- Pagination or "Load more" button
@@ -77,7 +77,7 @@ acceptance_criteria:
- [ ] Ads landing page has conversion-focused copy, pricing, and FAQ
- [ ] Dashboard shell has sidebar, top bar, and main content area
- [ ] Dashboard is responsive: sidebar collapses to drawer on mobile
- [ ] All migrated pages use ShieldAI theme (no old color values)
- [ ] All migrated pages use Kordant theme (no old color values)
- [ ] No references to old `packages/web/` paths in new code
- [ ] Route structure matches: `/blog`, `/blog/:slug`, `/ads`, `/dashboard`

View File

@@ -1,8 +1,8 @@
# 09. Database — Migrate Full Prisma Schema to Drizzle ORM
meta:
id: shieldai-unified-restructure-09
feature: shieldai-unified-restructure
id: kordant-unified-restructure-09
feature: kordant-unified-restructure
priority: P0
depends_on: []
tags: [backend, database, drizzle, schema]

View File

@@ -1,10 +1,10 @@
# 10. Database — PostgreSQL Connection, Migrations, and Seed Data
meta:
id: shieldai-unified-restructure-10
feature: shieldai-unified-restructure
id: kordant-unified-restructure-10
feature: kordant-unified-restructure
priority: P0
depends_on: [shieldai-unified-restructure-09]
depends_on: [kordant-unified-restructure-09]
tags: [backend, database, drizzle, postgres]
objective:
@@ -90,8 +90,8 @@ acceptance_criteria:
validation:
- `cd web && pnpm db:generate` — check `drizzle/` folder for SQL files
- `cd web && pnpm db:push` — verify tables created via `psql -d shieldai -c "\dt"`
- `cd web && pnpm db:seed` — verify data exists via `psql -d shieldai -c "SELECT COUNT(*) FROM users;"`
- `cd web && pnpm db:push` — verify tables created via `psql -d kordant -c "\dt"`
- `cd web && pnpm db:seed` — verify data exists via `psql -d kordant -c "SELECT COUNT(*) FROM users;"`
- Create a temporary test route that queries `db.select().from(users)` and renders results
notes:
@@ -102,9 +102,9 @@ notes:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: shieldai
POSTGRES_PASSWORD: shieldai
POSTGRES_DB: shieldai
POSTGRES_USER: kordant
POSTGRES_PASSWORD: kordant
POSTGRES_DB: kordant
ports:
- "5432:5432"
```

View File

@@ -1,10 +1,10 @@
# 11. tRPC Foundation — Auth Context, Middleware, and Protected Procedures
meta:
id: shieldai-unified-restructure-11
feature: shieldai-unified-restructure
id: kordant-unified-restructure-11
feature: kordant-unified-restructure
priority: P0
depends_on: [shieldai-unified-restructure-10]
depends_on: [kordant-unified-restructure-10]
tags: [backend, trpc, auth, api]
objective:

View File

@@ -1,10 +1,10 @@
# 12. Backend Router — User & Family Group Management
meta:
id: shieldai-unified-restructure-12
feature: shieldai-unified-restructure
id: kordant-unified-restructure-12
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-11]
depends_on: [kordant-unified-restructure-11]
tags: [backend, trpc, users, family, api]
objective:

View File

@@ -1,10 +1,10 @@
# 13. Backend Router — Subscriptions, Billing, and Stripe Webhooks
meta:
id: shieldai-unified-restructure-13
feature: shieldai-unified-restructure
id: kordant-unified-restructure-13
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-11]
depends_on: [kordant-unified-restructure-11]
tags: [backend, trpc, billing, stripe, api]
objective:

View File

@@ -1,10 +1,10 @@
# 14. Backend Router — Email, Push, and SMS Notifications
meta:
id: shieldai-unified-restructure-14
feature: shieldai-unified-restructure
id: kordant-unified-restructure-14
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-11]
depends_on: [kordant-unified-restructure-11]
tags: [backend, notifications, email, push, sms, api]
objective:
@@ -51,7 +51,7 @@ steps:
3. Create `web/src/server/services/email.templates.ts`:
- Each template is a function returning `{ subject, html, text }`
- Use simple HTML with inline CSS (or a minimal template engine)
- Include ShieldAI branding (logo, colors)
- Include Kordant branding (logo, colors)
4. Create `web/src/server/services/notification.service.ts`:
- `sendEmail`: call Resend, log result, handle errors
- `sendPush`: iterate device tokens, call FCM for Android tokens, APNs for iOS tokens (or use Firebase Admin which handles both)
@@ -84,7 +84,7 @@ acceptance_criteria:
- [ ] Device tokens can be registered and unregistered per user
- [ ] Notification preferences are persisted and respected (e.g., user can disable SMS alerts)
- [ ] All provider errors are caught and logged without crashing the app
- [ ] Email templates include ShieldAI branding
- [ ] Email templates include Kordant branding
validation:
- Send a test email via Resend to your own address and verify receipt

View File

@@ -1,10 +1,10 @@
# 15. Backend Router — DarkWatch (Dark Web Monitoring)
meta:
id: shieldai-unified-restructure-15
feature: shieldai-unified-restructure
id: kordant-unified-restructure-15
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-12, shieldai-unified-restructure-13, shieldai-unified-restructure-14]
depends_on: [kordant-unified-restructure-12, kordant-unified-restructure-13, kordant-unified-restructure-14]
tags: [backend, trpc, darkwatch, security, api]
objective:

View File

@@ -1,10 +1,10 @@
# 16. Backend Router — VoicePrint (Voice Cloning Detection)
meta:
id: shieldai-unified-restructure-16
feature: shieldai-unified-restructure
id: kordant-unified-restructure-16
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-12, shieldai-unified-restructure-13, shieldai-unified-restructure-14]
depends_on: [kordant-unified-restructure-12, kordant-unified-restructure-13, kordant-unified-restructure-14]
tags: [backend, trpc, voiceprint, ml, api]
objective:

View File

@@ -1,10 +1,10 @@
# 17. Backend Router — SpamShield (Spam Detection & Call Analysis)
meta:
id: shieldai-unified-restructure-17
feature: shieldai-unified-restructure
id: kordant-unified-restructure-17
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-12, shieldai-unified-restructure-13, shieldai-unified-restructure-14]
depends_on: [kordant-unified-restructure-12, kordant-unified-restructure-13, kordant-unified-restructure-14]
tags: [backend, trpc, spamshield, ml, api]
objective:

View File

@@ -1,10 +1,10 @@
# 18. Backend Router — HomeTitle (Property Monitoring)
meta:
id: shieldai-unified-restructure-18
feature: shieldai-unified-restructure
id: kordant-unified-restructure-18
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-12, shieldai-unified-restructure-13, shieldai-unified-restructure-14]
depends_on: [kordant-unified-restructure-12, kordant-unified-restructure-13, kordant-unified-restructure-14]
tags: [backend, trpc, hometitle, property, api]
objective:

View File

@@ -1,10 +1,10 @@
# 19. Backend Router — RemoveBrokers (Data Broker Removal)
meta:
id: shieldai-unified-restructure-19
feature: shieldai-unified-restructure
id: kordant-unified-restructure-19
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-12, shieldai-unified-restructure-13, shieldai-unified-restructure-14]
depends_on: [kordant-unified-restructure-12, kordant-unified-restructure-13, kordant-unified-restructure-14]
tags: [backend, trpc, removebrokers, privacy, api]
objective:

View File

@@ -1,10 +1,10 @@
# 20. Backend Router — Alert Correlation & Normalization Engine
meta:
id: shieldai-unified-restructure-20
feature: shieldai-unified-restructure
id: kordant-unified-restructure-20
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-15, shieldai-unified-restructure-16, shieldai-unified-restructure-17, shieldai-unified-restructure-18, shieldai-unified-restructure-19]
depends_on: [kordant-unified-restructure-15, kordant-unified-restructure-16, kordant-unified-restructure-17, kordant-unified-restructure-18, kordant-unified-restructure-19]
tags: [backend, trpc, correlation, alerts, api]
objective:
@@ -95,7 +95,7 @@ validation:
notes:
- Reference legacy: `packages/correlation/src/`, `packages/api/src/routes/correlation.routes.ts`
- The correlation engine is the "brain" that makes ShieldAI feel unified. Invest time in getting the entity extraction and grouping logic right.
- The correlation engine is the "brain" that makes Kordant feel unified. Invest time in getting the entity extraction and grouping logic right.
- Entity extraction should use regex patterns for emails, phones, and SSNs. Consider using a library like `compromise` for NLP extraction if payloads are unstructured.
- Time window for correlation: alerts within 30 days sharing an entity should be grouped. Adjust based on testing.
- The threat score algorithm should be transparent to users. Consider showing the breakdown (e.g., "+20 from DarkWatch exposure, +15 from SpamShield detection").

View File

@@ -1,10 +1,10 @@
# 21. Backend Router — Security Report Generation
meta:
id: shieldai-unified-restructure-21
feature: shieldai-unified-restructure
id: kordant-unified-restructure-21
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-20]
depends_on: [kordant-unified-restructure-20]
tags: [backend, trpc, reports, pdf, api]
objective:
@@ -56,11 +56,11 @@ steps:
5. Create report generator:
- `compileData`: query normalized alerts, exposures, voice analyses, spam detections, property changes for the period
- Calculate trends: compare current period to previous period
- `renderHTML`: use Handlebars or EJS template engine with ShieldAI branding
- `renderHTML`: use Handlebars or EJS template engine with Kordant branding
- `generatePDF`: use `puppeteer` (headless Chrome) for high-fidelity HTML-to-PDF, or `pdfkit` for programmatic generation
- `uploadPDF`: save to local disk or S3/R2, generate presigned URL
6. Create HTML templates:
- Design consistent report layout with ShieldAI colors and logo
- Design consistent report layout with Kordant colors and logo
- Include: executive summary, threat score trend, alert breakdown by service, exposure details, recommendations
- Make templates responsive for HTML email format
7. Implement scheduling:
@@ -79,7 +79,7 @@ steps:
acceptance_criteria:
- [ ] Reports can be generated for weekly, monthly, and annual periods
- [ ] Reports include data from all 5 services with trend analysis
- [ ] PDF output is branded with ShieldAI colors and logo
- [ ] PDF output is branded with Kordant colors and logo
- [ ] HTML email format is responsive and readable
- [ ] Report generation status is trackable (PENDING → COMPLETED)
- [ ] Generated reports are stored securely with user-scoped access

View File

@@ -1,10 +1,10 @@
# 22. Background Jobs — Scheduler, Scan Workers, and Reminders
meta:
id: shieldai-unified-restructure-22
feature: shieldai-unified-restructure
id: kordant-unified-restructure-22
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-20]
depends_on: [kordant-unified-restructure-20]
tags: [backend, jobs, scheduler, workers, background]
objective:

View File

@@ -1,10 +1,10 @@
# 23. Frontend Integration — Wire All Pages to tRPC APIs
meta:
id: shieldai-unified-restructure-23
feature: shieldai-unified-restructure
id: kordant-unified-restructure-23
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-11, shieldai-unified-restructure-12, shieldai-unified-restructure-13, shieldai-unified-restructure-14, shieldai-unified-restructure-15, shieldai-unified-restructure-16, shieldai-unified-restructure-17, shieldai-unified-restructure-18, shieldai-unified-restructure-19, shieldai-unified-restructure-20, shieldai-unified-restructure-21, shieldai-unified-restructure-22]
depends_on: [kordant-unified-restructure-11, kordant-unified-restructure-12, kordant-unified-restructure-13, kordant-unified-restructure-14, kordant-unified-restructure-15, kordant-unified-restructure-16, kordant-unified-restructure-17, kordant-unified-restructure-18, kordant-unified-restructure-19, kordant-unified-restructure-20, kordant-unified-restructure-21, kordant-unified-restructure-22]
tags: [frontend, integration, trpc, solidjs]
objective:

View File

@@ -1,14 +1,14 @@
# 24. Dashboard — Unified Widgets for All Services
meta:
id: shieldai-unified-restructure-24
feature: shieldai-unified-restructure
id: kordant-unified-restructure-24
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-23]
depends_on: [kordant-unified-restructure-23]
tags: [frontend, dashboard, widgets, solidjs]
objective:
- Build rich, interactive dashboard widgets that give users a unified view of their security posture across all ShieldAI services. Replace placeholder stat cards with real, actionable widgets.
- Build rich, interactive dashboard widgets that give users a unified view of their security posture across all Kordant services. Replace placeholder stat cards with real, actionable widgets.
deliverables:
- `web/src/components/dashboard/ThreatScoreWidget.tsx` — Circular gauge showing overall threat score (0-100):

View File

@@ -1,10 +1,10 @@
# 25. Real-Time Alerts — WebSocket Push Notifications
meta:
id: shieldai-unified-restructure-25
feature: shieldai-unified-restructure
id: kordant-unified-restructure-25
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-23]
depends_on: [kordant-unified-restructure-23]
tags: [backend, frontend, websocket, realtime, notifications]
objective:

View File

@@ -1,10 +1,10 @@
# 26. Polish — Error Boundaries, Loading States, Skeletons, and Transitions
meta:
id: shieldai-unified-restructure-26
feature: shieldai-unified-restructure
id: kordant-unified-restructure-26
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-24, shieldai-unified-restructure-25]
depends_on: [kordant-unified-restructure-24, kordant-unified-restructure-25]
tags: [frontend, polish, ux, accessibility, solidjs]
objective:
@@ -13,7 +13,7 @@ objective:
deliverables:
- `web/src/components/ui/ErrorBoundary.tsx` — Global error boundary:
- Catches runtime errors in child components
- Displays friendly error page with ShieldAI branding
- Displays friendly error page with Kordant branding
- "Try again" button to reset error boundary
- "Report issue" button (placeholder for Sentry integration)
- Logs error details to console (and eventually monitoring)
@@ -46,7 +46,7 @@ deliverables:
steps:
1. Create `web/src/components/ui/ErrorBoundary.tsx`:
- Use SolidJS `ErrorBoundary` component as base
- Custom fallback UI with ShieldAI logo, error message, retry button
- Custom fallback UI with Kordant logo, error message, retry button
- Capture stack trace for debugging
2. Create `web/src/components/ui/Skeleton.tsx`:
- Use Tailwind `animate-pulse` or custom shimmer animation

View File

@@ -1,10 +1,10 @@
# 27. Browser Extension — Move to browser-ext/ and Update API Client
meta:
id: shieldai-unified-restructure-27
feature: shieldai-unified-restructure
id: kordant-unified-restructure-27
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-23]
depends_on: [kordant-unified-restructure-23]
tags: [extension, browser, api, migration]
objective:
@@ -26,7 +26,7 @@ deliverables:
- `vite.config.ts` — Build config
- `package.json` — Dependencies
- Updated `browser-ext/src/lib/api-client.ts`:
- Communicates with `https://api.shieldai.com/api/trpc` (or local dev URL)
- Communicates with `https://api.kordant.com/api/trpc` (or local dev URL)
- Uses tRPC HTTP batch link for efficient requests
- Authenticates with API key (`x-api-key` header) or JWT
- Endpoints:
@@ -40,7 +40,7 @@ deliverables:
- Build scripts for Chrome/Firefox
- Updated manifest:
- Permissions: `activeTab`, `storage`, `declarativeNetRequest`, `notifications`
- Host permissions: `https://api.shieldai.com/*`, `https://*.shieldai.com/*`
- Host permissions: `https://api.kordant.com/*`, `https://*.kordant.com/*`
steps:
1. Create `browser-ext/` directory at project root.
@@ -51,7 +51,7 @@ steps:
- `git mv packages/extension/package.json browser-ext/`
- Copy tests: `cp -r packages/extension/tests browser-ext/`
3. Update `browser-ext/package.json`:
- Change name to `@shieldai/browser-ext`
- Change name to `@kordant/browser-ext`
- Update dependencies: add `@trpc/client`, remove legacy API client deps
- Update build scripts
4. Update `browser-ext/src/lib/api-client.ts`:
@@ -75,7 +75,7 @@ steps:
- Show auth status (linked/unlinked)
- Show recent spam detections
- Quick actions: "Check number", "Report spam"
- Use ShieldAI theme colors (import theme tokens or hardcode for now)
- Use Kordant theme colors (import theme tokens or hardcode for now)
7. Update content script:
- Preserve phishing detection logic
- Report detected phishing to `api.extension.reportPhishing`
@@ -117,7 +117,7 @@ notes:
- Reference legacy: `packages/extension/src/`
- The extension cannot directly import from `web/` due to build isolation. Options for tRPC types:
1. Generate a standalone type file from the web app's router and copy it to `browser-ext/src/types/trpc.ts`
2. Create a shared `@shieldai/types` package (but we're unifying, so avoid new packages)
2. Create a shared `@kordant/types` package (but we're unifying, so avoid new packages)
3. Use `any` for the router type in extension (not recommended)
Recommended: Option 1 — generate types as part of web build.
- The extension's popup UI is currently plain HTML/TS. Consider using a lightweight framework (e.g., SolidJS for popup) for consistency with the web app, but this is optional.

View File

@@ -1,39 +1,39 @@
# 28. iOS App — SwiftUI Foundation, Navigation, and Shared Theme
meta:
id: shieldai-unified-restructure-28
feature: shieldai-unified-restructure
id: kordant-unified-restructure-28
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-01, shieldai-unified-restructure-02]
depends_on: [kordant-unified-restructure-01, kordant-unified-restructure-02]
tags: [ios, swiftui, foundation, navigation, mobile]
objective:
- Establish the iOS app foundation in `iOS/ShieldAI/`: a SwiftUI project with app entry point, navigation architecture, and a shared theme system that mirrors the web app's ShieldAI brand palette and auto-shifting dark mode.
- Establish the iOS app foundation in `iOS/Kordant/`: a SwiftUI project with app entry point, navigation architecture, and a shared theme system that mirrors the web app's Kordant brand palette and auto-shifting dark mode.
deliverables:
- `iOS/ShieldAI/ShieldAIApp.swift` — App entry point:
- `iOS/Kordant/KordantApp.swift` — App entry point:
- `@main` app struct with `WindowGroup`
- Initializes dependency container (if using DI)
- Sets up appearance (tint color, navigation bar style)
- `iOS/ShieldAI/ContentView.swift` — Root view:
- `iOS/Kordant/ContentView.swift` — Root view:
- `TabView` with 5 tabs: Dashboard, Services, Alerts, Settings, Account
- Or `NavigationStack` with sidebar for iPad
- Handles auth state: shows `AuthView` if unauthenticated, `MainView` if authenticated
- `iOS/ShieldAI/Navigation/` — Navigation infrastructure:
- `iOS/Kordant/Navigation/` — Navigation infrastructure:
- `AppRouter.swift` — Navigation path manager using `NavigationPath`
- `Route.swift` — Enum of all app routes with associated values
- `RouterViewModifier.swift` — View modifier for deep linking
- `iOS/ShieldAI/Theme/` — Shared theme system:
- `ShieldAITheme.swift` — Theme protocol/struct with colors, fonts, spacing
- `Color+ShieldAI.swift` — SwiftUI Color extensions for all brand tokens:
- `iOS/Kordant/Theme/` — Shared theme system:
- `KordantTheme.swift` — Theme protocol/struct with colors, fonts, spacing
- `Color+Kordant.swift` — SwiftUI Color extensions for all brand tokens:
- `brandPrimary`, `brandPrimaryLight`, `brandPrimaryDark`
- `brandAccent`, `brandAccentLight`, `brandAccentDark`
- `bgPrimary`, `bgSecondary`, `bgTertiary`
- `textPrimary`, `textSecondary`, `textTertiary`
- `border`, `success`, `warning`, `error`
- `Font+ShieldAI.swift` — Typography scale matching web app
- `Font+Kordant.swift` — Typography scale matching web app
- `ThemeManager.swift` — Observable object managing light/dark/system mode
- `iOS/ShieldAI/Info.plist` and `Assets.xcassets/`:
- `iOS/Kordant/Info.plist` and `Assets.xcassets/`:
- App icon set (reuse web app SVGs converted to PNG/AppIcon)
- Color assets for dynamic light/dark variants
- Launch screen storyboard or SwiftUI launch view
@@ -43,8 +43,8 @@ deliverables:
- Target devices: iPhone + iPad
steps:
1. Verify `iOS/ShieldAI/` exists and has a valid Xcode project or Package.swift.
2. Create `ShieldAIApp.swift`:
1. Verify `iOS/Kordant/` exists and has a valid Xcode project or Package.swift.
2. Create `KordantApp.swift`:
- Set global accent color to `brandPrimary`
- Configure navigation bar appearance
- Inject `ThemeManager` as environment object
@@ -55,7 +55,7 @@ steps:
4. Create navigation system:
- `Route` enum with cases: `.dashboard`, `.service(ShieldService)`, `.alertDetail(Alert)`, `.settings`, `.profile`, etc.
- `AppRouter` class with `NavigationPath` and `navigate(to:)`, `pop()`, `popToRoot()`
- Support deep linking via URL scheme (`shieldai://dashboard`, `shieldai://alert/123`)
- Support deep linking via URL scheme (`kordant://dashboard`, `kordant://alert/123`)
5. Create theme system:
- Define all colors as static properties on `Color` extension
- Use `UIColor` dynamic colors for light/dark variants:
@@ -72,7 +72,7 @@ steps:
- Persist preference in `UserDefaults`
- Apply to root view using `.preferredColorScheme()`
7. Set up assets:
- Convert ShieldAI logo SVG to PDF or PNG for Xcode assets
- Convert Kordant logo SVG to PDF or PNG for Xcode assets
- Create color assets for all theme tokens with "Any, Dark" variants
- Add AppIcon set for all required sizes
8. Build and run on iOS Simulator to verify app launches with correct theme.
@@ -81,7 +81,7 @@ steps:
- Unit: ThemeManager correctly toggles between light/dark/system
- Unit: Color extensions return correct values for light and dark traits
- Unit: AppRouter pushes and pops routes correctly
- Visual: App launches with ShieldAI branding and correct tab structure
- Visual: App launches with Kordant branding and correct tab structure
- Visual: Theme shifts correctly when device dark mode toggles
acceptance_criteria:
@@ -90,14 +90,14 @@ acceptance_criteria:
- [ ] Theme colors match web app palette in both light and dark modes
- [ ] Theme manager persists user preference across app restarts
- [ ] Navigation stack works for pushing and popping views
- [ ] Deep linking supports `shieldai://` URL scheme
- [ ] Deep linking supports `kordant://` URL scheme
- [ ] App icon and launch screen display correctly
validation:
- Build and run on iPhone 15 Pro simulator (iOS 17+)
- Toggle device dark mode and verify all colors shift
- Test navigation by tapping through all tabs and sub-pages
- Verify deep link: `xcrun simctl openurl booted shieldai://dashboard`
- Verify deep link: `xcrun simctl openurl booted kordant://dashboard`
- Run unit tests via Xcode Cmd+U
notes:
@@ -105,4 +105,4 @@ notes:
- SwiftUI's `NavigationStack` (iOS 16+) replaces the older `NavigationView`. Use it for proper path-based navigation.
- For iPad, consider a sidebar (`NavigationSplitView`) instead of tab bar for better space utilization.
- The theme system should be the single source of truth for all visual values. No hardcoded colors anywhere in the app.
- Use SF Symbols for icons where possible. For custom icons (ShieldAI logo), use vector PDFs in assets.
- Use SF Symbols for icons where possible. For custom icons (Kordant logo), use vector PDFs in assets.

View File

@@ -1,60 +1,60 @@
# 29. iOS App — Design System Components Matching Web Theme
meta:
id: shieldai-unified-restructure-29
feature: shieldai-unified-restructure
id: kordant-unified-restructure-29
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-28]
depends_on: [kordant-unified-restructure-28]
tags: [ios, swiftui, design-system, components, mobile]
objective:
- Build a comprehensive set of reusable SwiftUI components that mirror the web app's UI primitives (Button, Card, Input, Badge, Modal, Toast) using the iOS theme system from task 28. These components should feel native to iOS while maintaining visual consistency with the web app.
deliverables:
- `iOS/ShieldAI/Components/ShieldButton.swift` — Button component:
- `iOS/Kordant/Components/ShieldButton.swift` — Button component:
- Styles: primary (filled), secondary (outlined), ghost (text only), danger
- Sizes: small, medium, large
- States: enabled, disabled, loading (shows `ProgressView`)
- Supports icons (leading/trailing)
- `iOS/ShieldAI/Components/ShieldCard.swift` — Card container:
- `iOS/Kordant/Components/ShieldCard.swift` — Card container:
- Gradient background matching web `.gradient-card`
- Border with corner radius
- Optional header and footer content
- Tap gesture support
- `iOS/ShieldAI/Components/ShieldTextField.swift` — Text input:
- `iOS/Kordant/Components/ShieldTextField.swift` — Text input:
- Label, placeholder, validation state
- Secure text entry toggle for passwords
- Error message display
- Focus state styling
- `iOS/ShieldAI/Components/ShieldBadge.swift` — Status badge:
- `iOS/Kordant/Components/ShieldBadge.swift` — Status badge:
- Variants: default, success, warning, error, info
- Small rounded pill shape
- Icon + text or text only
- `iOS/ShieldAI/Components/ShieldModal.swift` — Modal/sheet presentation:
- `iOS/Kordant/Components/ShieldModal.swift` — Modal/sheet presentation:
- `.sheet` wrapper with consistent styling
- Title, content, and action buttons
- Dismiss gesture support
- `iOS/ShieldAI/Components/ShieldToast.swift` — Toast notification:
- `iOS/Kordant/Components/ShieldToast.swift` — Toast notification:
- Slide-in from top or bottom
- Auto-dismiss after 3-4 seconds
- Variants: success, error, warning, info
- Tap to dismiss
- Uses `overlay` modifier on root view
- `iOS/ShieldAI/Components/ShieldAvatar.swift` — User avatar:
- `iOS/Kordant/Components/ShieldAvatar.swift` — User avatar:
- Displays image or initials fallback
- Sizes: small, medium, large
- Online/away status indicator dot
- `iOS/ShieldAI/Components/ShieldProgressBar.swift` — Progress indicator:
- `iOS/Kordant/Components/ShieldProgressBar.swift` — Progress indicator:
- Linear progress bar with percentage label
- Color variants
- `iOS/ShieldAI/Components/ShieldEmptyState.swift` — Empty state view:
- `iOS/Kordant/Components/ShieldEmptyState.swift` — Empty state view:
- Icon, title, description, action button
- `iOS/ShieldAI/Components/ShieldSkeleton.swift` — Skeleton loading:
- `iOS/Kordant/Components/ShieldSkeleton.swift` — Skeleton loading:
- Shimmer animation using `LinearGradient` mask
- Text line and rectangle shapes
steps:
1. Create `iOS/ShieldAI/Components/` directory.
1. Create `iOS/Kordant/Components/` directory.
2. **ShieldButton**:
- Use `Button` with custom label
- Primary: `brandPrimary` background, white text
@@ -110,7 +110,7 @@ steps:
- Visual: Components adapt to Dynamic Type (accessibility font sizes)
acceptance_criteria:
- [ ] All 10 component types exist in `iOS/ShieldAI/Components/`
- [ ] All 10 component types exist in `iOS/Kordant/Components/`
- [ ] Each component supports light and dark modes
- [ ] Button supports all 4 styles, 3 sizes, and loading state
- [ ] TextField supports validation, secure entry, and focus styling

View File

@@ -1,45 +1,45 @@
# 30. iOS App — Authentication, Onboarding, and Account Setup
meta:
id: shieldai-unified-restructure-30
feature: shieldai-unified-restructure
id: kordant-unified-restructure-30
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-28, shieldai-unified-restructure-29]
depends_on: [kordant-unified-restructure-28, kordant-unified-restructure-29]
tags: [ios, swiftui, auth, onboarding, mobile]
objective:
- Build the authentication and onboarding flow for the iOS app: login, signup, password reset, and a multi-step onboarding experience. Use native iOS authentication where possible (Sign in with Apple) and maintain visual consistency with the web app.
deliverables:
- `iOS/ShieldAI/Views/Auth/AuthView.swift` — Auth container:
- `iOS/Kordant/Views/Auth/AuthView.swift` — Auth container:
- Switches between login and signup modes
- ShieldAI branding at top
- Kordant branding at top
- Social auth buttons (Sign in with Apple, Google)
- `iOS/ShieldAI/Views/Auth/LoginView.swift` — Login screen:
- `iOS/Kordant/Views/Auth/LoginView.swift` — Login screen:
- Email and password fields using `ShieldTextField`
- "Remember me" toggle
- "Forgot password?" link
- "Sign In" `ShieldButton`
- "Don't have an account? Sign up" link
- `iOS/ShieldAI/Views/Auth/SignupView.swift` — Signup screen:
- `iOS/Kordant/Views/Auth/SignupView.swift` — Signup screen:
- Name, email, password, confirm password fields
- Password strength indicator
- Terms of service agreement toggle
- "Create Account" button
- `iOS/ShieldAI/Views/Auth/ForgotPasswordView.swift` — Password reset:
- `iOS/Kordant/Views/Auth/ForgotPasswordView.swift` — Password reset:
- Email input + submit
- Success state with instructions
- `iOS/ShieldAI/Views/Onboarding/OnboardingView.swift` — Onboarding flow:
- `iOS/Kordant/Views/Onboarding/OnboardingView.swift` — Onboarding flow:
- Page-based `TabView` with 4 steps
- Step 1: Welcome + plan selection (Basic, Plus, Premium cards)
- Step 2: Add first watchlist item (email or phone)
- Step 3: Invite family members (optional)
- Step 4: Setup complete → transition to main app
- `iOS/ShieldAI/Views/Auth/BiometricAuthView.swift` — Face ID / Touch ID prompt:
- `iOS/Kordant/Views/Auth/BiometricAuthView.swift` — Face ID / Touch ID prompt:
- Triggered after first successful login
- Uses `LocalAuthentication` framework
- Stores preference in Keychain
- `iOS/ShieldAI/Services/AuthService.swift` — Auth business logic:
- `iOS/Kordant/Services/AuthService.swift` — Auth business logic:
- `login(email, password)` → calls API (task 31)
- `signup(name, email, password)` → calls API
- `resetPassword(email)` → calls API
@@ -49,10 +49,10 @@ deliverables:
- `logout()` → clears tokens and Keychain
steps:
1. Create `iOS/ShieldAI/Views/Auth/` and `iOS/ShieldAI/Views/Onboarding/` directories.
1. Create `iOS/Kordant/Views/Auth/` and `iOS/Kordant/Views/Onboarding/` directories.
2. **AuthView**:
- Use `@State` to toggle between login and signup
- Show ShieldAI logo and tagline at top
- Show Kordant logo and tagline at top
- Use `ShieldCard` for the form container
3. **LoginView**:
- `ShieldTextField` for email and password

View File

@@ -1,24 +1,24 @@
# 31. iOS App — API Client, tRPC Bridge, and Offline Support
meta:
id: shieldai-unified-restructure-31
feature: shieldai-unified-restructure
id: kordant-unified-restructure-31
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-28, shieldai-unified-restructure-29, shieldai-unified-restructure-30]
depends_on: [kordant-unified-restructure-28, kordant-unified-restructure-29, kordant-unified-restructure-30]
tags: [ios, swift, api, networking, offline, mobile]
objective:
- Build the API client layer for the iOS app that communicates with the unified monolith's tRPC endpoints. Since tRPC is TypeScript-native, we'll use a thin HTTP bridge approach: the iOS client calls tRPC procedures as typed HTTP JSON requests. Add offline support with local caching and request queuing.
deliverables:
- `iOS/ShieldAI/Services/APIClient.swift` — HTTP client:
- `iOS/Kordant/Services/APIClient.swift` — HTTP client:
- Wraps `URLSession` with async/await (`async throws` methods)
- Base URL from environment/config (`https://api.shieldai.com` or local)
- Base URL from environment/config (`https://api.kordant.com` or local)
- Automatic auth header injection (JWT from Keychain)
- Request/response logging in debug builds
- Retry logic with exponential backoff for network errors
- Timeout configuration
- `iOS/ShieldAI/Services/TRPCBridge.swift` — tRPC procedure caller:
- `iOS/Kordant/Services/TRPCBridge.swift` — tRPC procedure caller:
- `callProcedure<T: Decodable>(path: String, input: Encodable?) async throws -> T`
- Serializes input to JSON, sends POST to `/api/trpc/{path}`
- Deserializes response JSON to Swift `Decodable` type
@@ -28,29 +28,29 @@ deliverables:
- `billing.getSubscription() -> Subscription`
- `darkwatch.getWatchlist() -> [WatchlistItem]`
- etc.
- `iOS/ShieldAI/Models/` — Swift data models:
- `iOS/Kordant/Models/` — Swift data models:
- `User.swift`, `Subscription.swift`, `WatchlistItem.swift`, `Exposure.swift`, `Alert.swift`, `VoiceEnrollment.swift`, `VoiceAnalysis.swift`, `SpamRule.swift`, `PropertyWatchlistItem.swift`, `RemovalRequest.swift`, `BrokerListing.swift`, `NormalizedAlert.swift`, `CorrelationGroup.swift`, `SecurityReport.swift`
- All models conform to `Codable`, `Identifiable`, `Equatable`
- Enum types for Swift (e.g., `SubscriptionTier`, `AlertSeverity`, `ExposureSource`)
- `iOS/ShieldAI/Services/CacheManager.swift` — Offline cache:
- `iOS/Kordant/Services/CacheManager.swift` — Offline cache:
- `CacheEntry` with data, timestamp, TTL
- Stores in `UserDefaults` (small data) or file system (large data)
- `getCached<T>(key: String) -> T?`
- `setCached<T>(key: String, value: T, ttl: TimeInterval)`
- Automatic cache invalidation on TTL expiry
- `iOS/ShieldAI/Services/OfflineQueue.swift` — Request queue:
- `iOS/Kordant/Services/OfflineQueue.swift` — Request queue:
- Queues mutations when offline
- Retries queued requests when connectivity restored
- Persists queue to disk
- `addToQueue(request: QueuedRequest)`
- `processQueue()` — called when network becomes available
- `iOS/ShieldAI/Services/NetworkMonitor.swift` — Connectivity monitoring:
- `iOS/Kordant/Services/NetworkMonitor.swift` — Connectivity monitoring:
- Uses `NWPathMonitor` to track network state
- Publishes `isConnected` boolean
- Triggers queue processing when connection restored
steps:
1. Create `iOS/ShieldAI/Services/` and `iOS/ShieldAI/Models/` directories.
1. Create `iOS/Kordant/Services/` and `iOS/Kordant/Models/` directories.
2. **APIClient**:
- Create `APIClient` class as `@Observable` or singleton
- `request<T: Decodable>(endpoint: String, method: String, body: Data?) async throws -> T`
@@ -75,7 +75,7 @@ steps:
- Add computed properties where needed (e.g., `Alert.isCritical: Bool`)
5. **CacheManager**:
- Use `JSONEncoder` to serialize values
- Store in `UserDefaults` with key prefix `shieldai.cache.`
- Store in `UserDefaults` with key prefix `kordant.cache.`
- TTL check: compare `Date()` to stored timestamp
- Clear all cache on logout
6. **OfflineQueue**:

View File

@@ -1,53 +1,53 @@
# 32. iOS App — Dashboard and Service Screens (DarkWatch, VoicePrint, SpamShield, etc.)
meta:
id: shieldai-unified-restructure-32
feature: shieldai-unified-restructure
id: kordant-unified-restructure-32
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-28, shieldai-unified-restructure-29, shieldai-unified-restructure-30, shieldai-unified-restructure-31]
depends_on: [kordant-unified-restructure-28, kordant-unified-restructure-29, kordant-unified-restructure-30, kordant-unified-restructure-31]
tags: [ios, swiftui, dashboard, services, mobile]
objective:
- Build the main dashboard and all service-specific screens for the iOS app. These should mirror the web app's functionality while using native iOS UI patterns (lists, forms, sheets, charts).
deliverables:
- `iOS/ShieldAI/Views/Dashboard/DashboardView.swift` — Main dashboard:
- `iOS/Kordant/Views/Dashboard/DashboardView.swift` — Main dashboard:
- Scrollable vertical stack of widgets
- Threat score gauge (circular progress ring)
- Recent alerts list (top 5)
- Service summary cards (DarkWatch, VoicePrint, SpamShield, HomeTitle, RemoveBrokers)
- Quick action buttons
- Pull-to-refresh
- `iOS/ShieldAI/Views/Dashboard/AlertDetailView.swift` — Alert detail:
- `iOS/Kordant/Views/Dashboard/AlertDetailView.swift` — Alert detail:
- Full alert information
- Correlated alerts section
- "Mark as resolved" and "False positive" actions
- `iOS/ShieldAI/Views/Services/DarkWatchView.swift` — DarkWatch screen:
- `iOS/Kordant/Views/Services/DarkWatchView.swift` — DarkWatch screen:
- Watchlist items list with add/remove
- Exposures list with severity badges
- Exposure detail with source info and recommendations
- "Run scan" button
- `iOS/ShieldAI/Views/Services/VoicePrintView.swift` — VoicePrint screen:
- `iOS/Kordant/Views/Services/VoicePrintView.swift` — VoicePrint screen:
- Voice enrollments list with play/delete
- "Enroll voice" button → opens recording sheet
- Analysis history list
- Analysis detail with confidence and verdict
- `iOS/ShieldAI/Views/Services/SpamShieldView.swift` — SpamShield screen:
- `iOS/Kordant/Views/Services/SpamShieldView.swift` — SpamShield screen:
- Blocked calls/SMS statistics
- Custom rules list with add/edit/delete
- Number check input with result
- "Report spam" button
- `iOS/ShieldAI/Views/Services/HomeTitleView.swift` — HomeTitle screen:
- `iOS/Kordant/Views/Services/HomeTitleView.swift` — HomeTitle screen:
- Watched properties list with add/remove
- Property detail with snapshots and changes
- Map view showing property location (MapKit)
- "Run scan" button
- `iOS/ShieldAI/Views/Services/RemoveBrokersView.swift` — RemoveBrokers screen:
- `iOS/Kordant/Views/Services/RemoveBrokersView.swift` — RemoveBrokers screen:
- Broker registry list with search/filter
- Removal requests list with status
- Request detail with progress timeline
- "Start removal" button
- `iOS/ShieldAI/Views/Settings/SettingsView.swift` — Settings:
- `iOS/Kordant/Views/Settings/SettingsView.swift` — Settings:
- Account info, subscription details
- Notification preferences toggle
- Theme selection (light/dark/system)

View File

@@ -1,42 +1,42 @@
# 33. iOS App — Push Notifications, Biometrics, Voice Enrollment, Camera
meta:
id: shieldai-unified-restructure-33
feature: shieldai-unified-restructure
id: kordant-unified-restructure-33
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-28, shieldai-unified-restructure-29, shieldai-unified-restructure-30, shieldai-unified-restructure-31, shieldai-unified-restructure-32]
depends_on: [kordant-unified-restructure-28, kordant-unified-restructure-29, kordant-unified-restructure-30, kordant-unified-restructure-31, kordant-unified-restructure-32]
tags: [ios, swiftui, native-features, push, biometrics, camera, mobile]
objective:
- Implement native iOS features that differentiate the mobile experience: push notifications via APNs, biometric authentication, voice enrollment with audio recording, and camera integration for document scanning or QR codes.
deliverables:
- `iOS/ShieldAI/Services/PushNotificationService.swift` — Push notification handling:
- `iOS/Kordant/Services/PushNotificationService.swift` — Push notification handling:
- Registers for remote notifications with APNs
- Handles device token registration with backend (task 14)
- Processes incoming notifications in foreground and background
- Deep links to relevant screen based on notification payload
- Rich notification content (images, actions) via Notification Service Extension
- `iOS/ShieldAI/Services/BiometricAuthService.swift` — Biometric authentication:
- `iOS/Kordant/Services/BiometricAuthService.swift` — Biometric authentication:
- Evaluates Face ID / Touch ID availability
- Prompts for biometric authentication
- Stores credential in Keychain for biometric-protected access
- Fallback to device passcode
- `iOS/ShieldAI/Views/VoicePrint/RecordingView.swift` — Voice recording UI:
- `iOS/Kordant/Views/VoicePrint/RecordingView.swift` — Voice recording UI:
- Real-time waveform visualization using `AVAudioRecorder` + `CAShapeLayer`
- Record / stop / playback controls
- Duration timer
- Quality check (minimum duration, signal level)
- Submit enrollment to API
- `iOS/ShieldAI/Views/Common/DocumentScannerView.swift` — Document scanning:
- `iOS/Kordant/Views/Common/DocumentScannerView.swift` — Document scanning:
- Uses `VisionKit` `VNDocumentCameraViewController` (iOS 13+)
- Captures ID documents or property deeds
- OCR text extraction using `VNRecognizeTextRequest`
- Review and retake functionality
- `iOS/ShieldAI/Services/CameraService.swift` — Camera access wrapper:
- `iOS/Kordant/Services/CameraService.swift` — Camera access wrapper:
- Checks and requests camera/microphone permissions
- Handles permission denied states with guidance to Settings
- `iOS/ShieldAI/ShieldAI.entitlements` — App entitlements:
- `iOS/Kordant/Kordant.entitlements` — App entitlements:
- Push notifications (`aps-environment`)
- Sign in with Apple (`com.apple.developer.applesignin`)
- Keychain sharing (if needed)
@@ -44,14 +44,14 @@ deliverables:
steps:
1. **Push Notifications**:
- Add `UIApplicationDelegate` methods or `UNUserNotificationCenterDelegate`
- `registerForRemoteNotifications()` in `ShieldAIApp.swift` on launch
- `registerForRemoteNotifications()` in `KordantApp.swift` on launch
- `didRegisterForRemoteNotificationsWithDeviceToken` → send token to backend via `api.notification.registerDevice`
- `didReceiveRemoteNotification` → parse payload, show local notification if in foreground
- Handle notification tap: extract `screen` and `id` from payload, navigate via `AppRouter`
- Create Notification Service Extension target for rich notifications (image attachments)
2. **Biometric Auth**:
- `LAContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics)`
- `evaluatePolicy` with localized reason: "Authenticate to access ShieldAI"
- `evaluatePolicy` with localized reason: "Authenticate to access Kordant"
- On success: unlock Keychain item containing refresh token
- On failure: show password fallback
- Add toggle in Settings to enable/disable biometric auth
@@ -73,9 +73,9 @@ steps:
- Show explanatory UI before requesting permission
- Handle `.denied` and `.restricted` states
6. Update `Info.plist`:
- `NSMicrophoneUsageDescription`: "ShieldAI needs microphone access to enroll your voice for clone detection."
- `NSCameraUsageDescription`: "ShieldAI uses the camera to scan documents and verify your identity."
- `NSFaceIDUsageDescription`: "Use Face ID to securely access your ShieldAI account."
- `NSMicrophoneUsageDescription`: "Kordant needs microphone access to enroll your voice for clone detection."
- `NSCameraUsageDescription`: "Kordant uses the camera to scan documents and verify your identity."
- `NSFaceIDUsageDescription`: "Use Face ID to securely access your Kordant account."
- `UIBackgroundModes`: `remote-notification`
7. Test on physical device (simulator cannot test push notifications or biometrics accurately).

View File

@@ -1,22 +1,22 @@
# 34. Android App — Jetpack Compose Foundation, Navigation, and Shared Theme
meta:
id: shieldai-unified-restructure-34
feature: shieldai-unified-restructure
id: kordant-unified-restructure-34
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-01, shieldai-unified-restructure-02]
depends_on: [kordant-unified-restructure-01, kordant-unified-restructure-02]
tags: [android, jetpack-compose, foundation, navigation, mobile]
objective:
- Establish the Android app foundation in `android/`: a Jetpack Compose project with app entry point, navigation architecture, and a shared theme system that mirrors the web app's ShieldAI brand palette with Material3 and dynamic dark mode support.
- Establish the Android app foundation in `android/`: a Jetpack Compose project with app entry point, navigation architecture, and a shared theme system that mirrors the web app's Kordant brand palette with Material3 and dynamic dark mode support.
deliverables:
- `android/` directory with complete Android project:
- `app/build.gradle.kts` — App module configuration
- `app/src/main/AndroidManifest.xml` — App manifest with permissions
- `app/src/main/java/com/shieldai/android/MainActivity.kt` — Entry point with `setContent`
- `app/src/main/java/com/shieldai/android/ShieldAIApp.kt` — Application class
- `android/app/src/main/java/com/shieldai/android/ui/theme/` — Theme system:
- `app/src/main/java/com/kordant/android/MainActivity.kt` — Entry point with `setContent`
- `app/src/main/java/com/kordant/android/KordantApp.kt` — Application class
- `android/app/src/main/java/com/kordant/android/ui/theme/` — Theme system:
- `Color.kt` — All brand color tokens as `Color` constants:
- `BrandPrimary`, `BrandPrimaryLight`, `BrandPrimaryDark`
- `BrandAccent`, `BrandAccentLight`, `BrandAccentDark`
@@ -25,11 +25,11 @@ deliverables:
- `Success`, `Warning`, `Error`, `Info`
- `Type.kt` — Typography scale using Material3 `Typography`
- `Shape.kt` — Corner radius shapes (small, medium, large)
- `Theme.kt``ShieldAITheme` composable:
- `Theme.kt``KordantTheme` composable:
- `lightColorScheme()` and `darkColorScheme()` using Material3
- `dynamicColor` support for Android 12+ (optional)
- Manual theme override state
- `android/app/src/main/java/com/shieldai/android/navigation/` — Navigation:
- `android/app/src/main/java/com/kordant/android/navigation/` — Navigation:
- `AppNavigation.kt` — Navigation host with all routes
- `Screen.kt` — Sealed class of all destinations with arguments
- `BottomNavBar.kt` — Bottom navigation with 5 items: Dashboard, Services, Alerts, Settings, Account
@@ -57,7 +57,7 @@ steps:
defaultConfig {
minSdk = 26
targetSdk = 35
applicationId = "com.shieldai.android"
applicationId = "com.kordant.android"
}
buildFeatures { compose = true }
composeOptions { kotlinCompilerExtensionVersion = "1.5.14" }
@@ -77,7 +77,7 @@ steps:
- `Theme.kt`:
```kotlin
@Composable
fun ShieldAITheme(
fun KordantTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
dynamicColor: Boolean = false, // disable for brand consistency
content: @Composable () -> Unit
@@ -99,12 +99,12 @@ steps:
- `BottomNavBar.kt`: `NavigationBar` with 5 items, each with icon and label
- Handle auth state: if unauthenticated, show Login as start destination
5. Create `MainActivity.kt`:
- `setContent { ShieldAITheme { AppNavigation() } }`
- `setContent { KordantTheme { AppNavigation() } }`
- Handle window insets for edge-to-edge display
6. Create `ShieldAIApp.kt`:
6. Create `KordantApp.kt`:
- Application class for initialization (dependency injection setup, if used)
7. Add app icons:
- Convert ShieldAI logo SVG to vector drawable (`res/drawable/ic_logo.xml`)
- Convert Kordant logo SVG to vector drawable (`res/drawable/ic_logo.xml`)
- Generate mipmap icons using Android Studio's Image Asset Studio
8. Build and run on Android Emulator to verify app launches.

View File

@@ -1,17 +1,17 @@
# 35. Android App — Design System Components Matching Web Theme
meta:
id: shieldai-unified-restructure-35
feature: shieldai-unified-restructure
id: kordant-unified-restructure-35
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-34]
depends_on: [kordant-unified-restructure-34]
tags: [android, jetpack-compose, design-system, components, mobile]
objective:
- Build a comprehensive set of reusable Jetpack Compose components that mirror the web app's UI primitives (Button, Card, Input, Badge, Modal, Toast) using the Android theme system from task 34. These should feel native to Android while maintaining visual consistency.
deliverables:
- `android/app/src/main/java/com/shieldai/android/ui/components/` — Component library:
- `android/app/src/main/java/com/kordant/android/ui/components/` — Component library:
- `ShieldButton.kt` — Button component:
- Variants: primary (filled), secondary (outlined), ghost (text), danger
- Sizes: small, medium, large
@@ -55,7 +55,7 @@ deliverables:
- Text line and rectangle shapes
steps:
1. Create `android/app/src/main/java/com/shieldai/android/ui/components/` directory.
1. Create `android/app/src/main/java/com/kordant/android/ui/components/` directory.
2. **ShieldButton**:
- `@Composable fun ShieldButton(...)`
- Primary: `Button` with `containerColor = BrandPrimary`

View File

@@ -1,47 +1,47 @@
# 36. Android App — Authentication, Onboarding, and Account Setup
meta:
id: shieldai-unified-restructure-36
feature: shieldai-unified-restructure
id: kordant-unified-restructure-36
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-34, shieldai-unified-restructure-35]
depends_on: [kordant-unified-restructure-34, kordant-unified-restructure-35]
tags: [android, jetpack-compose, auth, onboarding, mobile]
objective:
- Build the authentication and onboarding flow for the Android app: login, signup, password reset, and a multi-step onboarding experience. Use native Android authentication where possible (Google Sign-In, Credential Manager) and maintain visual consistency with the web app.
deliverables:
- `android/app/src/main/java/com/shieldai/android/ui/screens/auth/` — Auth screens:
- `android/app/src/main/java/com/kordant/android/ui/screens/auth/` — Auth screens:
- `AuthScreen.kt` — Auth container with login/signup toggle
- `LoginScreen.kt` — Email + password login form
- `SignupScreen.kt` — Account creation form
- `ForgotPasswordScreen.kt` — Password reset request
- `ResetPasswordScreen.kt` — Password reset confirmation
- `android/app/src/main/java/com/shieldai/android/ui/screens/onboarding/` — Onboarding:
- `android/app/src/main/java/com/kordant/android/ui/screens/onboarding/` — Onboarding:
- `OnboardingScreen.kt` — Horizontal pager with 4 steps
- `PlanSelectionStep.kt` — Tier cards (Basic, Plus, Premium)
- `WatchlistSetupStep.kt` — Add first email/phone
- `FamilyInviteStep.kt` — Invite family members
- `CompleteStep.kt` — Success animation and "Get Started"
- `android/app/src/main/java/com/shieldai/android/ui/screens/auth/BiometricAuthScreen.kt` — Biometric prompt:
- `android/app/src/main/java/com/kordant/android/ui/screens/auth/BiometricAuthScreen.kt` — Biometric prompt:
- Uses `BiometricPrompt` from `androidx.biometric:biometric`
- Face/fingerprint authentication
- Fallback to device credential
- `android/app/src/main/java/com/shieldai/android/viewmodel/AuthViewModel.kt` — Auth logic:
- `android/app/src/main/java/com/kordant/android/viewmodel/AuthViewModel.kt` — Auth logic:
- `login(email, password)` → calls API (task 37)
- `signup(name, email, password)` → calls API
- `resetPassword(email)` → calls API
- `signInWithGoogle()` → Google Sign-In
- `enableBiometricAuth()` → stores credential in EncryptedSharedPreferences
- `logout()` → clears tokens and state
- `android/app/src/main/java/com/shieldai/android/data/repository/AuthRepository.kt` — Data layer:
- `android/app/src/main/java/com/kordant/android/data/repository/AuthRepository.kt` — Data layer:
- Token storage in `EncryptedSharedPreferences`
- API calls via repository pattern
steps:
1. Create auth and onboarding screen directories.
2. **AuthScreen**:
- `Column` with ShieldAI logo and tagline
- `Column` with Kordant logo and tagline
- `TabRow` or custom toggle for Login/Signup
- `ShieldCard` containing the form
3. **LoginScreen**:

View File

@@ -1,41 +1,41 @@
# 37. Android App — API Client, tRPC Bridge, and Offline Support
meta:
id: shieldai-unified-restructure-37
feature: shieldai-unified-restructure
id: kordant-unified-restructure-37
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-34, shieldai-unified-restructure-35, shieldai-unified-restructure-36]
depends_on: [kordant-unified-restructure-34, kordant-unified-restructure-35, kordant-unified-restructure-36]
tags: [android, kotlin, api, networking, offline, mobile]
objective:
- Build the API client layer for the Android app that communicates with the unified monolith's tRPC endpoints. Use a thin HTTP bridge approach with Retrofit or Ktor Client, plus offline support with Room caching and WorkManager request queuing.
deliverables:
- `android/app/src/main/java/com/shieldai/android/data/remote/` — Remote data layer:
- `android/app/src/main/java/com/kordant/android/data/remote/` — Remote data layer:
- `TRPCApiService.kt` — Retrofit interface or Ktor client defining all tRPC endpoints:
- `@POST("api/trpc/user.me")`, `@POST("api/trpc/darkwatch.getWatchlist")`, etc.
- Request/response wrappers for tRPC batch format
- `TRPCResponse.kt` / `TRPCError.kt` — Data classes for tRPC response/error parsing
- `AuthInterceptor.kt` — OkHttp interceptor injecting JWT from EncryptedSharedPreferences
- `ErrorHandler.kt` — Centralized error handling with retry logic
- `android/app/src/main/java/com/shieldai/android/data/local/` — Local data layer:
- `ShieldAIDatabase.kt` — Room database with entities:
- `android/app/src/main/java/com/kordant/android/data/local/` — Local data layer:
- `KordantDatabase.kt` — Room database with entities:
- `UserEntity`, `SubscriptionEntity`, `WatchlistItemEntity`, `ExposureEntity`, `AlertEntity`, `VoiceEnrollmentEntity`, `VoiceAnalysisEntity`, `SpamRuleEntity`, `PropertyEntity`, `RemovalRequestEntity`, `BrokerListingEntity`
- `DAO` interfaces for each entity with CRUD operations
- `CacheManager.kt` — TTL-based cache logic using Room
- `android/app/src/main/java/com/shieldai/android/data/repository/` — Repository layer:
- `android/app/src/main/java/com/kordant/android/data/repository/` — Repository layer:
- `UserRepository.kt`, `DarkWatchRepository.kt`, `VoicePrintRepository.kt`, etc.
- Each repository: remote fetch → cache to Room → return flow/coroutine
- `RepositoryModule.kt` — Hilt module for DI
- `android/app/src/main/java/com/shieldai/android/data/model/` — Data models:
- `android/app/src/main/java/com/kordant/android/data/model/` — Data models:
- `User.kt`, `Subscription.kt`, `WatchlistItem.kt`, `Exposure.kt`, `Alert.kt`, etc.
- All models as Kotlin data classes with `Parcelable` where needed
- Enum classes matching backend enums
- `android/app/src/main/java/com/shieldai/android/data/sync/` — Offline support:
- `android/app/src/main/java/com/kordant/android/data/sync/` — Offline support:
- `OfflineWorker.kt` — WorkManager worker for retrying queued requests
- `PendingRequestDao.kt` — Room table for queued mutations
- `SyncManager.kt` — Manages queue, triggers WorkManager on connectivity restore
- `android/app/src/main/java/com/shieldai/android/di/` — Dependency injection:
- `android/app/src/main/java/com/kordant/android/di/` — Dependency injection:
- `NetworkModule.kt` — Retrofit/OkHttp setup
- `DatabaseModule.kt` — Room database provider
- `RepositoryModule.kt` — Repository bindings
@@ -58,7 +58,7 @@ steps:
- Enum classes with `@Serializable` and custom serializers if needed
- Date parsing using `kotlinx.datetime` or `java.time.Instant`
4. Create Room database:
- `ShieldAIDatabase` abstract class extending `RoomDatabase`
- `KordantDatabase` abstract class extending `RoomDatabase`
- Entity classes with `@Entity`, `@PrimaryKey`, `@ColumnInfo`
- DAO interfaces with `@Dao`, `@Query`, `@Insert`, `@Update`, `@Delete`
- Type converters for complex types (enums, dates, JSON)
@@ -73,7 +73,7 @@ steps:
- Network monitor using `ConnectivityManager` to trigger immediate sync
7. Create DI modules:
- `NetworkModule`: provide `Retrofit`, `OkHttpClient` with auth interceptor and logging
- `DatabaseModule`: provide `ShieldAIDatabase` singleton
- `DatabaseModule`: provide `KordantDatabase` singleton
- `RepositoryModule`: bind repository interfaces to implementations
8. Test all layers with mocked dependencies.

View File

@@ -1,17 +1,17 @@
# 38. Android App — Dashboard and Service Screens
meta:
id: shieldai-unified-restructure-38
feature: shieldai-unified-restructure
id: kordant-unified-restructure-38
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-34, shieldai-unified-restructure-35, shieldai-unified-restructure-36, shieldai-unified-restructure-37]
depends_on: [kordant-unified-restructure-34, kordant-unified-restructure-35, kordant-unified-restructure-36, kordant-unified-restructure-37]
tags: [android, jetpack-compose, dashboard, services, mobile]
objective:
- Build the main dashboard and all service-specific screens for the Android app. These should mirror the web app's functionality while using native Android UI patterns (lists, cards, bottom sheets, charts).
deliverables:
- `android/app/src/main/java/com/shieldai/android/ui/screens/dashboard/` — Dashboard:
- `android/app/src/main/java/com/kordant/android/ui/screens/dashboard/` — Dashboard:
- `DashboardScreen.kt` — Main dashboard with scrollable content:
- Threat score circular gauge (custom Canvas composable)
- Recent alerts list (top 5)
@@ -19,15 +19,15 @@ deliverables:
- Quick action FABs or chips
- Pull-to-refresh with `PullRefreshIndicator`
- `AlertDetailScreen.kt` — Alert detail with correlated alerts
- `android/app/src/main/java/com/shieldai/android/ui/screens/services/` — Service screens:
- `android/app/src/main/java/com/kordant/android/ui/screens/services/` — Service screens:
- `DarkWatchScreen.kt` — Watchlist and exposures
- `VoicePrintScreen.kt` — Enrollments and analysis history
- `SpamShieldScreen.kt` — Stats, rules, number check
- `HomeTitleScreen.kt` — Properties, map, changes
- `RemoveBrokersScreen.kt` — Broker registry, requests
- `android/app/src/main/java/com/shieldai/android/ui/screens/settings/` — Settings:
- `android/app/src/main/java/com/kordant/android/ui/screens/settings/` — Settings:
- `SettingsScreen.kt` — Account, preferences, family, logout
- `android/app/src/main/java/com/shieldai/android/viewmodel/` — ViewModels:
- `android/app/src/main/java/com/kordant/android/viewmodel/` — ViewModels:
- `DashboardViewModel.kt`, `DarkWatchViewModel.kt`, `VoicePrintViewModel.kt`, etc.
- Each exposes `StateFlow<UiState>` with Loading, Success, Error states

View File

@@ -1,42 +1,42 @@
# 39. Android App — Push Notifications, Biometrics, Voice Enrollment, Call Screening
meta:
id: shieldai-unified-restructure-39
feature: shieldai-unified-restructure
id: kordant-unified-restructure-39
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-34, shieldai-unified-restructure-35, shieldai-unified-restructure-36, shieldai-unified-restructure-37, shieldai-unified-restructure-38]
depends_on: [kordant-unified-restructure-34, kordant-unified-restructure-35, kordant-unified-restructure-36, kordant-unified-restructure-37, kordant-unified-restructure-38]
tags: [android, jetpack-compose, native-features, push, biometrics, call-screening, mobile]
objective:
- Implement native Android features that differentiate the mobile experience: push notifications via FCM, biometric authentication, voice enrollment with audio recording, and call screening integration for SpamShield.
deliverables:
- `android/app/src/main/java/com/shieldai/android/service/FCMService.kt` — Firebase Cloud Messaging:
- `android/app/src/main/java/com/kordant/android/service/FCMService.kt` — Firebase Cloud Messaging:
- Extends `FirebaseMessagingService`
- `onMessageReceived` — processes incoming notifications
- `onNewToken` — sends token to backend (task 14)
- Creates notification channels for different alert types
- Rich notifications with images and actions
- Deep links to relevant screens based on payload
- `android/app/src/main/java/com/shieldai/android/ui/screens/auth/BiometricAuthScreen.kt` — Biometric prompt:
- `android/app/src/main/java/com/kordant/android/ui/screens/auth/BiometricAuthScreen.kt` — Biometric prompt:
- Uses `BiometricPrompt` from `androidx.biometric:biometric`
- Face/fingerprint authentication
- Fallback to device PIN/pattern/password
- Stores credential in `EncryptedSharedPreferences`
- `android/app/src/main/java/com/shieldai/android/ui/screens/voiceprint/RecordingScreen.kt` — Voice recording:
- `android/app/src/main/java/com/kordant/android/ui/screens/voiceprint/RecordingScreen.kt` — Voice recording:
- Real-time waveform visualization using `AudioRecord` + `Canvas`
- Record / stop / playback controls
- Duration timer
- Quality check (minimum duration, amplitude threshold)
- Submit enrollment to API
- `android/app/src/main/java/com/shieldai/android/service/CallScreeningService.kt` — Call screening:
- `android/app/src/main/java/com/kordant/android/service/CallScreeningService.kt` — Call screening:
- Extends `CallScreeningService` (API 29+)
- Intercepts incoming calls
- Queries `spamshield.checkNumber` via API
- Displays caller info overlay with reputation score
- Auto-blocks known spam numbers based on user rules
- Logs screened calls for history
- `android/app/src/main/java/com/shieldai/android/util/PermissionManager.kt` — Permission handling:
- `android/app/src/main/java/com/kordant/android/util/PermissionManager.kt` — Permission handling:
- Centralized manager for all runtime permissions
- Camera, microphone, phone, notifications, call screening
- Handles permission rationale and denied states

View File

@@ -1,10 +1,10 @@
# 40. Shared Mobile Assets — Icons, Colors, Typography, and Brand Guidelines
meta:
id: shieldai-unified-restructure-40
feature: shieldai-unified-restructure
id: kordant-unified-restructure-40
feature: kordant-unified-restructure
priority: P1
depends_on: [shieldai-unified-restructure-28, shieldai-unified-restructure-34]
depends_on: [kordant-unified-restructure-28, kordant-unified-restructure-34]
tags: [design, assets, branding, mobile, web]
objective:
@@ -30,7 +30,7 @@ deliverables:
- `radius.json` — Border radius scale:
- none, sm, md, lg, xl, full
- `assets/` directory at project root:
- `logo/`ShieldAI logo in multiple formats:
- `logo/`Kordant logo in multiple formats:
- SVG (source of truth)
- PNG exports at 1x, 2x, 3x, 4x
- PDF (for iOS vector assets)
@@ -53,7 +53,7 @@ deliverables:
- `scripts/generate-assets.sh` — Converts SVGs to platform-specific formats
- `scripts/generate-tokens.sh` — Generates platform code from JSON tokens:
- `web/src/theme/tokens.ts` from `colors.json`
- `iOS/ShieldAI/Theme/GeneratedTokens.swift` from JSON
- `iOS/Kordant/Theme/GeneratedTokens.swift` from JSON
- `android/app/src/main/res/values/generated_tokens.xml` from JSON
steps:
@@ -71,7 +71,7 @@ steps:
}
```
3. Create `assets/logo/`:
- Design or export ShieldAI logo as SVG
- Design or export Kordant logo as SVG
- Generate PNGs at 64px, 128px, 256px, 512px, 1024px
- Generate iOS app icon set (all required sizes)
- Generate Android mipmap densities (mdpi to xxxhdpi)
@@ -85,7 +85,7 @@ steps:
- Onboarding illustrations
- Export as SVG + PNG (2x)
6. Write `docs/BRAND_GUIDELINES.md`:
- Introduction to ShieldAI brand identity
- Introduction to Kordant brand identity
- Color section: primary palette, semantic colors, accessibility requirements (WCAG AA)
- Typography section: Inter font, scale, usage rules
- Spacing section: 8px base grid, scale usage

View File

@@ -1,10 +1,10 @@
# 41. Cleanup — Remove Legacy packages/, services/, and server/ Directories
meta:
id: shieldai-unified-restructure-41
feature: shieldai-unified-restructure
id: kordant-unified-restructure-41
feature: kordant-unified-restructure
priority: P0
depends_on: [shieldai-unified-restructure-26, shieldai-unified-restructure-27]
depends_on: [kordant-unified-restructure-26, kordant-unified-restructure-27]
tags: [cleanup, infrastructure, migration]
objective:
@@ -105,7 +105,7 @@ validation:
- `pnpm install && pnpm dev` → web app starts on localhost:3000
- `cd web && pnpm build` → completes successfully
- `cd web && pnpm test` → all tests pass
- `grep -r "@shieldai/" --include="*.ts" --include="*.tsx" .` → no references to old workspace packages
- `grep -r "@kordant/" --include="*.ts" --include="*.tsx" .` → no references to old workspace packages
notes:
- Do NOT delete git history. The archive branch preserves everything.

View File

@@ -1,10 +1,10 @@
# 42. Deployment — Update Docker, CI/CD, and Environment Configuration
meta:
id: shieldai-unified-restructure-42
feature: shieldai-unified-restructure
id: kordant-unified-restructure-42
feature: kordant-unified-restructure
priority: P0
depends_on: [shieldai-unified-restructure-41]
depends_on: [kordant-unified-restructure-41]
tags: [deployment, docker, ci-cd, infrastructure]
objective:
@@ -159,7 +159,7 @@ acceptance_criteria:
validation:
- `docker compose up --build -d` → verify `docker ps` shows all containers running
- `curl http://localhost:3000/health` → returns `{"status":"ok"}`
- `docker logs shieldai-web` → no startup errors
- `docker logs kordant-web` → no startup errors
- Push to a test branch and verify GitHub Actions CI pipeline runs
- Create a test release tag and verify CD pipeline triggers
- Run `scripts/backup.sh` and verify dump file created

View File

@@ -1,12 +1,12 @@
# ShieldAI Unified Restructure
# Kordant Unified Restructure
Objective: Restructure ShieldAI from a fragmented microservices/packages architecture into a unified, cohesive SolidStart monolith with a Lendair-inspired landing page, auto-shifting theme, and all backend functionality preserved — plus native iOS and Android apps.
Objective: Restructure Kordant from a fragmented microservices/packages architecture into a unified, cohesive SolidStart monolith with a Lendair-inspired landing page, auto-shifting theme, and all backend functionality preserved — plus native iOS and Android apps.
Status legend: [ ] todo, [~] in-progress, [x] done
Tasks
- [x] 01 — Project Foundation — Root Config & Directory Cleanup → `01-project-foundation-cleanup.md`
- [x] 02 — Theme System — Auto-Shifting CSS with ShieldAI Brand Palette → `02-theme-system-brand-palette.md`
- [x] 02 — Theme System — Auto-Shifting CSS with Kordant Brand Palette → `02-theme-system-brand-palette.md`
- [x] 03 — UI Primitive Library — Button, Card, Input, Badge, Modal, Toast, Typewriter → `03-ui-primitive-library.md`
- [x] 04 — Layout Components — Navbar, Footer, PageContainer, AppShell → `04-layout-components.md`
- [x] 05 — Landing Page — Hero Section with Animated Background → `05-landing-page-hero.md`
@@ -78,11 +78,11 @@ Dependencies
- 42 depends on 41
Exit criteria
- The `web/` directory contains a fully functional SolidStart app with a beautiful, cohesive ShieldAI-branded frontend
- The `web/` directory contains a fully functional SolidStart app with a beautiful, cohesive Kordant-branded frontend
- All 5 service domains are accessible via tRPC routers with zero functionality loss
- The landing page matches Lendair's visual quality with ShieldAI-specific content and auto-shifting theme
- The landing page matches Lendair's visual quality with Kordant-specific content and auto-shifting theme
- The browser extension lives in `browser-ext/` and communicates with the monolith
- `iOS/ShieldAI` is a functional SwiftUI app with service dashboard, auth, and native features
- `iOS/Kordant` is a functional SwiftUI app with service dashboard, auth, and native features
- `android/` is a functional Jetpack Compose app with service dashboard, auth, and native features
- All three platforms (web, iOS, Android) share a consistent visual identity and color palette
- Legacy `packages/`, `services/`, and `server/` directories are removed or archived

View File

@@ -11,14 +11,14 @@ Tasks
- [x] 04 — Replace "ShieldAI" display text across web UI → `04-update-web-ui-brand-text.md`
- [x] 05 — Update email templates, notification content, and queue names → `05-update-web-email-notification-templates.md`
- [x] 06 — Update browser storage keys, theme keys, and user-agent headers → `06-update-web-storage-keys-and-constants.md`
- [ ] 07 — Update seed data, blog content, and landing page copy → `07-update-web-seed-data-and-blog-content.md`
- [ ] 08 — Update browser extension manifest, HTML, and storage keys → `08-update-browser-extension-branding.md`
- [ ] 09 — Update iOS bundle ID, Xcode project, and Swift source branding → `09-update-ios-app-branding.md`
- [ ] 10 — Update Android package names, Kotlin source, and resources → `10-update-android-app-branding.md`
- [ ] 11 — Update CI/CD workflows, Docker tags, and service names → `11-update-ci-cd-and-infrastructure.md`
- [ ] 12 — Update SVG ad creatives and marketing assets → `12-update-assets-and-ad-creatives.md`
- [ ] 13 — Update READMEs, plan documents, and task references → `13-update-documentation-and-plan-files.md`
- [ ] 14 — Final sweep and verification of rebrand completeness → `14-verify-rebrand-completeness.md`
- [x] 07 — Update seed data, blog content, and landing page copy → `07-update-web-seed-data-and-blog-content.md`
- [x] 08 — Update browser extension manifest, HTML, and storage keys → `08-update-browser-extension-branding.md`
- [x] 09 — Update iOS bundle ID, Xcode project, and Swift source branding → `09-update-ios-app-branding.md`
- [x] 10 — Update Android package names, Kotlin source, and resources → `10-update-android-app-branding.md`
- [x] 11 — Update CI/CD workflows, Docker tags, and service names → `11-update-ci-cd-and-infrastructure.md`
- [x] 12 — Update SVG ad creatives and marketing assets → `12-update-assets-and-ad-creatives.md`
- [x] 13 — Update READMEs, plan documents, and task references → `13-update-documentation-and-plan-files.md`
- [x] 14 — Final sweep and verification of rebrand completeness → `14-verify-rebrand-completeness.md`
Dependencies
- 01 → 03 (package scope must be updated first before web imports)