From baf915d9aa0e788ec7fca9babe44cbcb93bc6a6b Mon Sep 17 00:00:00 2001 From: Halil Ibrahim Ozturk Date: Thu, 6 Aug 2026 00:59:48 +0200 Subject: [PATCH 01/14] docs: define Inmerson personal branding --- ...08-06-inmerson-personal-branding-design.md | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 docs/superpowers/specs/2026-08-06-inmerson-personal-branding-design.md diff --git a/docs/superpowers/specs/2026-08-06-inmerson-personal-branding-design.md b/docs/superpowers/specs/2026-08-06-inmerson-personal-branding-design.md new file mode 100644 index 00000000..161d64ea --- /dev/null +++ b/docs/superpowers/specs/2026-08-06-inmerson-personal-branding-design.md @@ -0,0 +1,38 @@ +# Inmerson Personal Branding Design + +## Goal + +Remove all Warsaw University of Life Sciences and SGGW attribution from the product, and present the application as a personal learning laboratory owned by Inmerson. + +## Brand system + +- Primary name: `Inmerson` +- Descriptive signature: `Personal Math & Biotech Lab` +- Full formal name: `Inmerson • Personal Math & Biotech Lab` +- Compact product reference: `Inmerson Lab` + +`Math Biotech` may remain as a description of the learning domain, but it must not be presented as an institution or external owner. + +## User interface + +The dashboard hero will lead with `Inmerson`, followed by the signature `Personal Math & Biotech Lab`. The supporting sentence will describe the application as a personal interactive laboratory for mathematical modeling and biotechnology, without mentioning any university. + +The sidebar will use `Inmerson Lab` as the compact identity so the narrow layout remains readable. The AI assistant will introduce itself as the Inmerson Lab assistant. + +## Platform metadata + +The browser title, PWA manifest, application metadata, Capacitor app name, and Android labels will use the personal brand. The repository README and backend API identity will also describe the project as Inmerson Lab so public and installed surfaces remain consistent. + +## Architecture + +A small `data/branding.ts` module will hold shared React-facing brand constants. Components will import these constants instead of duplicating names. Static files that cannot import TypeScript will use the exact same approved strings directly. + +## Testing + +A branding unit test will establish the approved name hierarchy and assert that exported branding contains neither `Warsaw University of Life Sciences` nor `SGGW`. Existing typecheck, unit tests, and production build must remain green. + +## Success criteria + +1. No current source or generated user-facing metadata attributes the project to Warsaw University of Life Sciences or SGGW. +2. Dashboard, sidebar, AI greeting, browser/PWA/mobile metadata, README, and API identity consistently use the Inmerson personal brand. +3. The branding regression test, full test suite, typecheck, production build, and GitHub Pages deployment succeed. From e531ce667b6b893bac374a73563f8f2b270eca86 Mon Sep 17 00:00:00 2001 From: Halil Ibrahim Ozturk Date: Thu, 6 Aug 2026 01:00:21 +0200 Subject: [PATCH 02/14] docs: plan Inmerson personal branding rollout --- .../2026-08-06-inmerson-personal-branding.md | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 docs/superpowers/plans/2026-08-06-inmerson-personal-branding.md diff --git a/docs/superpowers/plans/2026-08-06-inmerson-personal-branding.md b/docs/superpowers/plans/2026-08-06-inmerson-personal-branding.md new file mode 100644 index 00000000..ac303b8f --- /dev/null +++ b/docs/superpowers/plans/2026-08-06-inmerson-personal-branding.md @@ -0,0 +1,164 @@ +# Inmerson Personal Branding Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Replace university attribution with a consistent personal brand: `Inmerson • Personal Math & Biotech Lab`. + +**Architecture:** Add a small typed branding module for React-facing copy, then update static platform metadata with the same approved strings. Preserve mathematical and biotechnology learning terminology while removing external institutional ownership. + +**Tech Stack:** React 19, TypeScript, Vitest, Vite, PWA manifest, Capacitor, Android resources, Express. + +## Global Constraints + +- Primary name is exactly `Inmerson`. +- Signature is exactly `Personal Math & Biotech Lab`. +- Formal name is exactly `Inmerson • Personal Math & Biotech Lab`. +- Compact name is exactly `Inmerson Lab`. +- Do not retain `Warsaw University of Life Sciences` or `SGGW` in current user-facing source or metadata. +- Do not change package IDs, URLs, mathematical content, or application behavior. + +--- + +### Task 1: Establish tested branding constants + +**Files:** +- Create: `data/branding.test.ts` +- Create: `data/branding.ts` + +**Interfaces:** +- Produces: `BRAND_NAME`, `BRAND_TAGLINE`, `BRAND_FULL_NAME`, `BRAND_SHORT_NAME`, and `BRAND_DESCRIPTION` string constants. + +- [ ] **Step 1: Write the failing test** + +```ts +import { describe, expect, it } from 'vitest'; +import { + BRAND_DESCRIPTION, + BRAND_FULL_NAME, + BRAND_NAME, + BRAND_SHORT_NAME, + BRAND_TAGLINE, +} from './branding'; + +describe('personal branding', () => { + it('uses the approved Inmerson identity', () => { + expect(BRAND_NAME).toBe('Inmerson'); + expect(BRAND_TAGLINE).toBe('Personal Math & Biotech Lab'); + expect(BRAND_FULL_NAME).toBe('Inmerson • Personal Math & Biotech Lab'); + expect(BRAND_SHORT_NAME).toBe('Inmerson Lab'); + }); + + it('contains no university attribution', () => { + const branding = [BRAND_NAME, BRAND_TAGLINE, BRAND_FULL_NAME, BRAND_SHORT_NAME, BRAND_DESCRIPTION].join(' '); + expect(branding).not.toContain('Warsaw University of Life Sciences'); + expect(branding).not.toContain('SGGW'); + }); +}); +``` + +- [ ] **Step 2: Run verification and confirm RED** + +Run: `npm run verify` + +Expected: TypeScript fails because `./branding` does not exist. + +- [ ] **Step 3: Add the minimal branding module** + +```ts +export const BRAND_NAME = 'Inmerson'; +export const BRAND_TAGLINE = 'Personal Math & Biotech Lab'; +export const BRAND_FULL_NAME = `${BRAND_NAME} • ${BRAND_TAGLINE}`; +export const BRAND_SHORT_NAME = 'Inmerson Lab'; +export const BRAND_DESCRIPTION = 'A personal interactive laboratory for mathematical modeling, biotechnology, observation and learning.'; +``` + +- [ ] **Step 4: Run tests and confirm GREEN** + +Run: `npm run verify` + +Expected: branding tests and all existing checks pass. + +### Task 2: Apply branding to React surfaces + +**Files:** +- Modify: `views/DashboardView.tsx` +- Modify: `components/Sidebar.tsx` +- Modify: `views/AIChatView.tsx` + +**Interfaces:** +- Consumes: constants exported by `data/branding.ts`. + +- [ ] **Step 1: Update the dashboard hero** + +Import `BRAND_NAME`, `BRAND_TAGLINE`, and `BRAND_DESCRIPTION`. Render `BRAND_NAME` as the hero heading, `BRAND_TAGLINE` as a prominent signature, and `BRAND_DESCRIPTION` as supporting copy. + +- [ ] **Step 2: Update compact navigation identity** + +Import `BRAND_SHORT_NAME` in `Sidebar.tsx` and replace the `Math Biotech` heading with it. + +- [ ] **Step 3: Update AI introduction** + +Import `BRAND_SHORT_NAME` in `AIChatView.tsx` and introduce the assistant as `${BRAND_SHORT_NAME} Assistant`. + +- [ ] **Step 4: Run verification** + +Run: `npm run verify` + +Expected: Typecheck, all tests, and production build succeed. + +### Task 3: Apply branding to platform and repository metadata + +**Files:** +- Modify: `index.html` +- Modify: `manifest.json` +- Modify: `metadata.json` +- Modify: `capacitor.config.ts` +- Modify: `android/app/src/main/res/values/strings.xml` +- Modify: `README.md` +- Modify: `server/src/index.ts` + +**Interfaces:** +- Static surfaces use the exact approved strings from Global Constraints. + +- [ ] **Step 1: Update browser and PWA identity** + +Set the HTML title and manifest full name to `Inmerson • Personal Math & Biotech Lab`; set manifest short name to `Inmerson Lab`. + +- [ ] **Step 2: Update application metadata** + +Set metadata name to the formal brand and description to the personal-lab description. + +- [ ] **Step 3: Update installed app labels** + +Set Capacitor and Android visible app names to `Inmerson Lab`. Preserve `com.inmersion.mathbiotech` identifiers. + +- [ ] **Step 4: Update public project and API identity** + +Change the README heading to the formal brand. Rename API display messages to `Inmerson Lab API` without changing endpoints or behavior. + +- [ ] **Step 5: Run full verification** + +Run: `npm run verify` + +Expected: 0 type errors, 0 failed tests, successful Vite production build. + +### Task 4: Verify removal and deploy + +**Files:** +- Generated by workflow: `site/**` + +- [ ] **Step 1: Search current source** + +Search for `Warsaw University of Life Sciences` and `SGGW` in the branch. Expected: no current source matches except historical documentation or git history; no user-facing current file matches. + +- [ ] **Step 2: Open and merge the pull request** + +Create a PR describing the personal brand, red-green test evidence, and metadata updates. Merge only after CI succeeds. + +- [ ] **Step 3: Verify main and Pages workflows** + +Confirm main CI succeeds and the Pages publishing workflow commits fresh `site/` output. + +- [ ] **Step 4: Verify live deployment** + +Confirm the latest Pages build status is `built`, and `site/index.html` references the newly generated assets and formal browser title. From d1f904505a8fb69bb1d3be414191221ca30d3d8b Mon Sep 17 00:00:00 2001 From: Halil Ibrahim Ozturk Date: Thu, 6 Aug 2026 01:00:31 +0200 Subject: [PATCH 03/14] test: define Inmerson branding contract --- data/branding.test.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 data/branding.test.ts diff --git a/data/branding.test.ts b/data/branding.test.ts new file mode 100644 index 00000000..8bc8d0c7 --- /dev/null +++ b/data/branding.test.ts @@ -0,0 +1,30 @@ +import { describe, expect, it } from 'vitest'; +import { + BRAND_DESCRIPTION, + BRAND_FULL_NAME, + BRAND_NAME, + BRAND_SHORT_NAME, + BRAND_TAGLINE, +} from './branding'; + +describe('personal branding', () => { + it('uses the approved Inmerson identity', () => { + expect(BRAND_NAME).toBe('Inmerson'); + expect(BRAND_TAGLINE).toBe('Personal Math & Biotech Lab'); + expect(BRAND_FULL_NAME).toBe('Inmerson • Personal Math & Biotech Lab'); + expect(BRAND_SHORT_NAME).toBe('Inmerson Lab'); + }); + + it('contains no university attribution', () => { + const branding = [ + BRAND_NAME, + BRAND_TAGLINE, + BRAND_FULL_NAME, + BRAND_SHORT_NAME, + BRAND_DESCRIPTION, + ].join(' '); + + expect(branding).not.toContain('Warsaw University of Life Sciences'); + expect(branding).not.toContain('SGGW'); + }); +}); From b2158c016d5d010756f9f565c5ef9eab8fc61f37 Mon Sep 17 00:00:00 2001 From: Halil Ibrahim Ozturk Date: Thu, 6 Aug 2026 01:02:24 +0200 Subject: [PATCH 04/14] feat: add shared Inmerson branding --- data/branding.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/branding.ts diff --git a/data/branding.ts b/data/branding.ts new file mode 100644 index 00000000..757d9d52 --- /dev/null +++ b/data/branding.ts @@ -0,0 +1,5 @@ +export const BRAND_NAME = 'Inmerson'; +export const BRAND_TAGLINE = 'Personal Math & Biotech Lab'; +export const BRAND_FULL_NAME = `${BRAND_NAME} • ${BRAND_TAGLINE}`; +export const BRAND_SHORT_NAME = 'Inmerson Lab'; +export const BRAND_DESCRIPTION = 'A personal interactive laboratory for mathematical modeling, biotechnology, observation and learning.'; From 9ed6286440b86afcc1fb726b343c74c817562c7a Mon Sep 17 00:00:00 2001 From: Halil Ibrahim Ozturk Date: Thu, 6 Aug 2026 01:03:36 +0200 Subject: [PATCH 05/14] feat: personalize dashboard identity --- views/DashboardView.tsx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/views/DashboardView.tsx b/views/DashboardView.tsx index 66535554..4e910fab 100644 --- a/views/DashboardView.tsx +++ b/views/DashboardView.tsx @@ -28,6 +28,11 @@ import { LearningDestinationRef, searchLearningDestinations, } from '../data/learningCatalog'; +import { + BRAND_DESCRIPTION, + BRAND_NAME, + BRAND_TAGLINE, +} from '../data/branding'; interface ModuleConfig { id: ModuleType; @@ -253,10 +258,13 @@ export const DashboardView: React.FC = ({ onSelectModule, onNavi -

Math Biotech

+
+

{BRAND_TAGLINE}

+

{BRAND_NAME}

+
-

- Interactive mathematical modeling for the Warsaw University of Life Sciences. Search a concept or enter a module to learn through observation and interaction. +

+ {BRAND_DESCRIPTION} Search a concept or enter a module to learn through careful observation and interaction.

From 496149a45b3470b67e32e449c4916f25df2bcb6d Mon Sep 17 00:00:00 2001 From: Halil Ibrahim Ozturk Date: Thu, 6 Aug 2026 01:04:34 +0200 Subject: [PATCH 06/14] feat: personalize sidebar identity --- components/Sidebar.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/Sidebar.tsx b/components/Sidebar.tsx index b95f8ff7..0a6ce66a 100644 --- a/components/Sidebar.tsx +++ b/components/Sidebar.tsx @@ -8,6 +8,7 @@ import { Cylinder, Globe, ArrowUpRight, PieChart, Sparkles } from 'lucide-react'; import { motion, AnimatePresence } from 'framer-motion'; +import { BRAND_SHORT_NAME } from '../data/branding'; interface SidebarProps { currentView: ViewMode; @@ -203,7 +204,7 @@ export const Sidebar: React.FC = ({ currentView, currentModule, se
-

Math Biotech

+

{BRAND_SHORT_NAME}

{currentModule.replace('_', ' ')}
From 680ab17ca7cb7eb43e488ad6f748be8f578a544e Mon Sep 17 00:00:00 2001 From: Halil Ibrahim Ozturk Date: Thu, 6 Aug 2026 01:05:07 +0200 Subject: [PATCH 07/14] feat: personalize AI assistant greeting --- views/AIChatView.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/views/AIChatView.tsx b/views/AIChatView.tsx index 19e28312..69317388 100644 --- a/views/AIChatView.tsx +++ b/views/AIChatView.tsx @@ -3,6 +3,7 @@ import React, { useState, useRef, useEffect } from 'react'; import ReactMarkdown from 'react-markdown'; import { Send, Settings, Sparkles, Key, AlertTriangle, Bot } from 'lucide-react'; import { GoogleGenAI } from "@google/genai"; +import { BRAND_SHORT_NAME } from '../data/branding'; interface Message { id: string; @@ -17,7 +18,7 @@ export const AIChatView: React.FC = () => { const [input, setInput] = useState(''); const [showSettings, setShowSettings] = useState(() => !localStorage.getItem(STORAGE_KEY)); const [messages, setMessages] = useState([ - { id: '1', role: 'model', text: 'Hello! I am your Math Biotech Assistant. 🧬\n\nI can solve math problems or explain biological concepts. How can I help you today?' } + { id: '1', role: 'model', text: `Hello! I am your ${BRAND_SHORT_NAME} Assistant. 🧬\n\nI can solve math problems or explain biological concepts. How can I help you today?` } ]); const [isLoading, setIsLoading] = useState(false); const messagesEndRef = useRef(null); From a3a29e870293fc840b8bbf500fb0764845057e1c Mon Sep 17 00:00:00 2001 From: Halil Ibrahim Ozturk Date: Thu, 6 Aug 2026 01:05:19 +0200 Subject: [PATCH 08/14] feat: personalize PWA identity --- manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index 2333b3e1..e7033c60 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,6 @@ { - "name": "Math Biotech SGGW", - "short_name": "MathBiotech", + "name": "Inmerson • Personal Math & Biotech Lab", + "short_name": "Inmerson Lab", "start_url": "/", "display": "standalone", "background_color": "#020617", From 5e4cf436abd9f83d9503d9aff989cd8ad620099d Mon Sep 17 00:00:00 2001 From: Halil Ibrahim Ozturk Date: Thu, 6 Aug 2026 01:05:27 +0200 Subject: [PATCH 09/14] feat: personalize application metadata --- metadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/metadata.json b/metadata.json index 95d76ced..9edd721b 100644 --- a/metadata.json +++ b/metadata.json @@ -1,5 +1,5 @@ { - "name": " Math Biotech", - "description": "A bio-inspired, interactive mathematical platform for analyzing Linear Algebra and Calculus through a futuristic research lens.", + "name": "Inmerson • Personal Math & Biotech Lab", + "description": "A personal interactive laboratory for mathematical modeling, biotechnology, observation and learning.", "requestFramePermissions": [] } \ No newline at end of file From 506bfb67305abaaa86c67f489004e1aca0eb2e31 Mon Sep 17 00:00:00 2001 From: Halil Ibrahim Ozturk Date: Thu, 6 Aug 2026 01:05:35 +0200 Subject: [PATCH 10/14] feat: personalize Capacitor app name --- capacitor.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/capacitor.config.ts b/capacitor.config.ts index faf93081..6fe4abfb 100644 --- a/capacitor.config.ts +++ b/capacitor.config.ts @@ -2,7 +2,7 @@ import type { CapacitorConfig } from '@capacitor/cli'; const config: CapacitorConfig = { appId: 'com.inmersion.mathbiotech', - appName: 'Math Biotech', + appName: 'Inmerson Lab', webDir: 'dist' }; From eae529124b0c523be6039f4daa9a1cba72bcff17 Mon Sep 17 00:00:00 2001 From: Halil Ibrahim Ozturk Date: Thu, 6 Aug 2026 01:05:44 +0200 Subject: [PATCH 11/14] feat: personalize Android app labels --- android/app/src/main/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index f7c7636a..4d11aafd 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -1,7 +1,7 @@ - Math Biotech - Math Biotech + Inmerson Lab + Inmerson Lab com.inmersion.mathbiotech com.inmersion.mathbiotech From 3fd624a06143593b581a00fca7e3e4c1c932932f Mon Sep 17 00:00:00 2001 From: Halil Ibrahim Ozturk Date: Thu, 6 Aug 2026 01:06:18 +0200 Subject: [PATCH 12/14] feat: personalize browser title --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index d9414d01..cffc7d56 100644 --- a/index.html +++ b/index.html @@ -8,7 +8,7 @@ - Math Biotech + Inmerson • Personal Math & Biotech Lab From a71008585e2e2a5b41dca7e28bc838083086259a Mon Sep 17 00:00:00 2001 From: Halil Ibrahim Ozturk Date: Thu, 6 Aug 2026 01:06:49 +0200 Subject: [PATCH 13/14] docs: present project as Inmerson Lab --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 43825e3f..bebb5794 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Math Biotech +# Inmerson • Personal Math & Biotech Lab -Mathematics learning application for biotechnology students, designed to be published as a responsive web app, an installable PWA and native mobile packages from one shared codebase. +A personal mathematics and biotechnology learning laboratory by Inmerson, designed to be published as a responsive web app, an installable PWA and native mobile packages from one shared codebase. The project combines interactive mathematical learning, biotechnology-oriented examples, three-dimensional visualizations and a REST API for deterministic calculations and study records. From f3157a298d4a4406b3ca32040ffcae984d60e05f Mon Sep 17 00:00:00 2001 From: Halil Ibrahim Ozturk Date: Thu, 6 Aug 2026 01:07:04 +0200 Subject: [PATCH 14/14] feat: personalize API display identity --- server/src/index.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server/src/index.ts b/server/src/index.ts index 8d2e52ed..1ec41441 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -20,7 +20,7 @@ app.use(express.urlencoded({ extended: true })); app.get('/health', (req: Request, res: Response) => { res.json({ status: 'OK', - message: 'Math Biotech API is running', + message: 'Inmerson Lab API is running', timestamp: new Date().toISOString() }); }); @@ -32,9 +32,9 @@ app.use('/api/exam', examRoutes); // Root endpoint app.get('/', (req: Request, res: Response) => { res.json({ - name: 'Math Biotech API', + name: 'Inmerson Lab API', version: '1.0.0', - description: 'Backend API for Math Biotech Project', + description: 'Backend API for Inmerson Personal Math & Biotech Lab', endpoints: { health: '/health', matrix: { @@ -71,9 +71,9 @@ app.use((err: Error, req: Request, res: Response, next: express.NextFunction) => // Start server app.listen(PORT, () => { - console.log(`✅ Math Biotech API server running on port ${PORT}`); + console.log(`✅ Inmerson Lab API server running on port ${PORT}`); console.log(`📊 Health check available at http://localhost:${PORT}/health`); console.log(`📚 API documentation at http://localhost:${PORT}/`); }); -export default app; +export default app; \ No newline at end of file