Rebrand as Semantika with honest, inspiration-based claims

Applies the brand platform consistently across the codebase:

- Name: Semantika everywhere — app name/slug/scheme, bundle ids
  (com.semantika.app), workspace package names, CDK stack, Cognito
  domain prefix, secret name (semantika/app), database name, product
  ids (semantika_monthly/_yearly), and storage keys.
- System instructions: Semantika is positioned as an intelligent
  reflection partner — not therapy, not self-help, not a course. It
  starts by exploring how the user interprets their situation and
  supports reflection and perspective-taking rather than delivering
  finished answers. Tone rules added: never judging, dramatic,
  overenthusiastic or preaching; always calm, curious, clear,
  respectful, structured, thoughtful.
- Honest claims: instructions and knowledge base now explicitly frame
  neurosemantics and NLP as models and inspiration for reflection, not
  scientifically established methods — including a note that several
  NLP claims lack support in controlled studies. Claiming or implying
  proven effects is forbidden.
- README: brand section (position, promise, mission, vision,
  positioning, tone, design words) and updated product philosophy.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0118DaxZR36RpnY524vRqx3z
This commit is contained in:
Claude
2026-08-03 14:46:10 +00:00
parent 6b7f0263e4
commit 07234cc9a8
18 changed files with 144 additions and 62 deletions
+37 -7
View File
@@ -1,11 +1,36 @@
# NeuroSemantics AI
# Semantika
A minimalist mobile app for iOS and Android. The product is one thing only:
an intelligent conversation partner with a specialized knowledge base in
neurosemantics and NLP. No course portal, no CRM, no community.
**Think Beyond Thought.**
Design language: calm, simple, clear. Off-white background, near-black text,
one dark blue-green accent. No animations, no gradients.
The world's first NeuroSemantic conversation platform. Semantika helps people
explore how they create meaning, interpret their experiences, and communicate
with themselves and others — through structured conversations inspired by
neurosemantic principles.
## Brand
- **Core promise** — Discover the meaning behind your thinking.
- **Mission** — Helping people create better meaning.
- **Vision** — To make NeuroSemantic thinking accessible to everyone.
**Positioning.** Semantika is not therapy, not self-help, and not a course.
It is an intelligent reflection partner that uses neurosemantic models to
help the user explore thinking patterns, communication, and perspective.
Instead of quick advice, Semantika starts by helping the user explore how
they interpret their situation — supporting reflection and
perspective-taking, not delivering finished answers.
**Honest claims.** Neurosemantics and NLP are presented as inspiration and
models for reflection, never as scientifically proven methods. This is
enforced in the system instructions and the knowledge base; copy in the app
and the stores must follow the same rule.
**Tone.** Never judging, dramatic, overenthusiastic, or preaching. Always
calm, curious, clear, respectful, structured, thoughtful.
**Design.** Scandinavian, clinical, quiet, precise, minimal. Off-white
background, near-black text, one dark blue-green accent. Generous white
space. No animations, no gradients.
## System overview
@@ -106,7 +131,7 @@ npx cdk deploy
After the first deploy:
1. Put values into the `neurosemantics/app` secret in Secrets Manager:
1. Put values into the `semantika/app` secret in Secrets Manager:
`OPENAI_API_KEY`, `APPLE_SHARED_SECRET`, `GOOGLE_SERVICE_ACCOUNT_JSON`.
2. Run `db/migrations/001_init.sql` against the cluster (credentials are in
the RDS-managed secret).
@@ -131,6 +156,11 @@ GitHub Actions: `ci.yml` lints, type-checks and tests every PR;
## Product philosophy
People grow when they become more aware of how they create meaning,
interpret their experiences, and shape their decisions. Semantika helps the
user ask better questions, discover new perspectives, and reflect on their
own thinking.
Every free user should leave the app feeling that the system understood
their situation, that a concrete analysis is ready, and that the next step
is available in Premium — never that they were held back by an artificial
+9 -9
View File
@@ -1,28 +1,28 @@
{
"expo": {
"name": "NeuroSemantics AI",
"slug": "neurosemantics-ai",
"name": "Semantika",
"slug": "semantika",
"version": "1.0.0",
"orientation": "portrait",
"scheme": "neurosemantics",
"scheme": "semantika",
"userInterfaceStyle": "light",
"backgroundColor": "#F7F6F2",
"ios": {
"bundleIdentifier": "com.neurosemantics.app",
"bundleIdentifier": "com.semantika.app",
"supportsTablet": false,
"usesAppleSignIn": true
},
"android": {
"package": "com.neurosemantics.app"
"package": "com.semantika.app"
},
"extra": {
"apiUrl": "https://REPLACE_WITH_API_URL",
"cognitoDomain": "https://REPLACE_WITH_PREFIX.auth.eu-north-1.amazoncognito.com",
"cognitoClientId": "REPLACE_WITH_CLIENT_ID",
"iosMonthlyProductId": "neurosemantics_monthly",
"iosYearlyProductId": "neurosemantics_yearly",
"androidMonthlyProductId": "neurosemantics_monthly",
"androidYearlyProductId": "neurosemantics_yearly"
"iosMonthlyProductId": "semantika_monthly",
"iosYearlyProductId": "semantika_yearly",
"androidMonthlyProductId": "semantika_monthly",
"androidYearlyProductId": "semantika_yearly"
}
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
{
"name": "@neurosemantics/mobile",
"name": "@semantika/mobile",
"version": "1.0.0",
"private": true,
"main": "index.ts",
+1 -1
View File
@@ -30,7 +30,7 @@ export interface Me {
messageCap: number;
}
const DEVICE_KEY = 'neurosemantics.device';
const DEVICE_KEY = 'semantika.device';
/** Stable anonymous id so guests can chat before signing in. */
async function getDeviceId(): Promise<string> {
+2 -2
View File
@@ -19,7 +19,7 @@ interface StoredSession {
expiresAt: number; // epoch ms
}
const STORE_KEY = 'neurosemantics.session';
const STORE_KEY = 'semantika.session';
const discovery: DiscoveryDocument = {
authorizationEndpoint: `${appConfig.cognitoDomain}/oauth2/authorize`,
@@ -27,7 +27,7 @@ const discovery: DiscoveryDocument = {
revocationEndpoint: `${appConfig.cognitoDomain}/oauth2/revoke`,
};
const redirectUri = makeRedirectUri({ scheme: 'neurosemantics', path: 'redirect' });
const redirectUri = makeRedirectUri({ scheme: 'semantika', path: 'redirect' });
/** Maps our provider names to Cognito hosted UI identity providers. */
const IDP: Record<Provider, string | undefined> = {
+1 -1
View File
@@ -97,7 +97,7 @@ export function ChatScreen({
style={styles.container}
behavior={Platform.OS === 'ios' ? 'padding' : undefined}
>
<Text style={styles.heading}>NeuroSemantics AI</Text>
<Text style={styles.heading}>Semantika</Text>
{showSuggestions ? (
<View style={styles.suggestions}>
{suggestions.map((s) => (
@@ -1,9 +1,9 @@
import { App } from 'aws-cdk-lib';
import { NeuroSemanticsStack } from '../lib/neurosemantics-stack.js';
import { SemantikaStack } from '../lib/semantika-stack.js';
const app = new App();
new NeuroSemanticsStack(app, 'NeuroSemantics', {
new SemantikaStack(app, 'Semantika', {
env: {
account: process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEFAULT_REGION ?? 'eu-north-1',
+1 -1
View File
@@ -1,5 +1,5 @@
{
"app": "npx tsx bin/neurosemantics.ts",
"app": "npx tsx bin/semantika.ts",
"context": {
"@aws-cdk/aws-lambda:recognizeLayerVersion": true,
"@aws-cdk/core:checkSecretUsage": true,
@@ -15,14 +15,14 @@ import { dirname, join } from 'node:path';
const repoRoot = join(dirname(fileURLToPath(import.meta.url)), '..', '..');
const DB_NAME = 'neurosemantics';
const APP_SCHEME_REDIRECT = 'neurosemantics://redirect';
const DB_NAME = 'semantika';
const APP_SCHEME_REDIRECT = 'semantika://redirect';
/**
* The entire system: one HTTP API, one Lambda, one database, one user pool,
* one application secret. CloudWatch logging comes with Lambda by default.
*/
export class NeuroSemanticsStack extends Stack {
export class SemantikaStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
@@ -46,9 +46,8 @@ export class NeuroSemanticsStack extends Stack {
// --- Application secret (filled in manually after first deploy) ---
const appSecret = new secretsmanager.Secret(this, 'AppSecret', {
secretName: 'neurosemantics/app',
description:
'OPENAI_API_KEY, APPLE_SHARED_SECRET, GOOGLE_SERVICE_ACCOUNT_JSON for NeuroSemantics AI',
secretName: 'semantika/app',
description: 'OPENAI_API_KEY, APPLE_SHARED_SECRET, GOOGLE_SERVICE_ACCOUNT_JSON for Semantika',
});
// --- Authentication: Cognito with Apple, Google and email ---
@@ -61,7 +60,7 @@ export class NeuroSemanticsStack extends Stack {
removalPolicy: RemovalPolicy.RETAIN,
});
const domainPrefix = this.node.tryGetContext('cognitoDomainPrefix') ?? 'neurosemantics';
const domainPrefix = this.node.tryGetContext('cognitoDomainPrefix') ?? 'semantika';
const domain = userPool.addDomain('Domain', { cognitoDomain: { domainPrefix } });
// Apple/Google federation requires developer credentials; provide them via
@@ -91,7 +90,7 @@ export class NeuroSemanticsStack extends Stack {
if (appleTeamId && appleKeyId && applePrivateKeySecretName) {
new cognito.UserPoolIdentityProviderApple(this, 'Apple', {
userPool,
clientId: 'com.neurosemantics.app.signin',
clientId: 'com.semantika.app.signin',
teamId: appleTeamId,
keyId: appleKeyId,
privateKeyValue: secretsmanager.Secret.fromSecretNameV2(
+1 -1
View File
@@ -1,5 +1,5 @@
{
"name": "@neurosemantics/infra",
"name": "@semantika/infra",
"version": "1.0.0",
"private": true,
"type": "module",
+37 -17
View File
@@ -1,11 +1,11 @@
{
"name": "neurosemantics-ai",
"name": "semantika",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "neurosemantics-ai",
"name": "semantika",
"version": "1.0.0",
"workspaces": [
"apps/mobile",
@@ -21,7 +21,7 @@
}
},
"apps/mobile": {
"name": "@neurosemantics/mobile",
"name": "@semantika/mobile",
"version": "1.0.0",
"dependencies": {
"expo": "~52.0.0",
@@ -40,7 +40,7 @@
}
},
"infra": {
"name": "@neurosemantics/infra",
"name": "@semantika/infra",
"version": "1.0.0",
"dependencies": {
"aws-cdk-lib": "^2.173.2",
@@ -99,6 +99,7 @@
},
"node_modules/@aws-cdk/cloud-assembly-schema/node_modules/jsonschema": {
"version": "1.5.0",
"extraneous": true,
"inBundle": true,
"license": "MIT",
"engines": {
@@ -107,6 +108,7 @@
},
"node_modules/@aws-cdk/cloud-assembly-schema/node_modules/semver": {
"version": "7.8.5",
"extraneous": true,
"inBundle": true,
"license": "ISC",
"bin": {
@@ -4315,18 +4317,6 @@
"node": "^22.20 || ^24.12 || >=25"
}
},
"node_modules/@neurosemantics/api": {
"resolved": "services/api",
"link": true
},
"node_modules/@neurosemantics/infra": {
"resolved": "infra",
"link": true
},
"node_modules/@neurosemantics/mobile": {
"resolved": "apps/mobile",
"link": true
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -5275,6 +5265,18 @@
"join-component": "^1.1.0"
}
},
"node_modules/@semantika/api": {
"resolved": "services/api",
"link": true
},
"node_modules/@semantika/infra": {
"resolved": "infra",
"link": true
},
"node_modules/@semantika/mobile": {
"resolved": "apps/mobile",
"link": true
},
"node_modules/@sinclair/typebox": {
"version": "0.27.12",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.12.tgz",
@@ -6265,6 +6267,7 @@
},
"node_modules/aws-cdk-lib/node_modules/@aws-cdk/cloud-assembly-api": {
"version": "2.2.6",
"extraneous": true,
"inBundle": true,
"license": "Apache-2.0",
"dependencies": {
@@ -6280,6 +6283,7 @@
},
"node_modules/aws-cdk-lib/node_modules/@aws/cloudformation-validate": {
"version": "1.6.0-beta",
"extraneous": true,
"inBundle": true,
"license": "Apache-2.0",
"engines": {
@@ -6288,11 +6292,13 @@
},
"node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": {
"version": "1.0.2",
"extraneous": true,
"inBundle": true,
"license": "Apache-2.0"
},
"node_modules/aws-cdk-lib/node_modules/balanced-match": {
"version": "4.0.4",
"extraneous": true,
"inBundle": true,
"license": "MIT",
"engines": {
@@ -6301,6 +6307,7 @@
},
"node_modules/aws-cdk-lib/node_modules/brace-expansion": {
"version": "5.0.8",
"extraneous": true,
"inBundle": true,
"license": "MIT",
"dependencies": {
@@ -6312,6 +6319,7 @@
},
"node_modules/aws-cdk-lib/node_modules/case": {
"version": "1.6.3",
"extraneous": true,
"inBundle": true,
"license": "(MIT OR GPL-3.0-or-later)",
"engines": {
@@ -6320,6 +6328,7 @@
},
"node_modules/aws-cdk-lib/node_modules/fs-extra": {
"version": "11.3.6",
"extraneous": true,
"inBundle": true,
"license": "MIT",
"dependencies": {
@@ -6333,11 +6342,13 @@
},
"node_modules/aws-cdk-lib/node_modules/graceful-fs": {
"version": "4.2.11",
"extraneous": true,
"inBundle": true,
"license": "ISC"
},
"node_modules/aws-cdk-lib/node_modules/ignore": {
"version": "5.3.2",
"extraneous": true,
"inBundle": true,
"license": "MIT",
"engines": {
@@ -6346,6 +6357,7 @@
},
"node_modules/aws-cdk-lib/node_modules/jsonfile": {
"version": "6.2.1",
"extraneous": true,
"inBundle": true,
"license": "MIT",
"dependencies": {
@@ -6357,6 +6369,7 @@
},
"node_modules/aws-cdk-lib/node_modules/jsonschema": {
"version": "1.5.0",
"extraneous": true,
"inBundle": true,
"license": "MIT",
"engines": {
@@ -6365,6 +6378,7 @@
},
"node_modules/aws-cdk-lib/node_modules/mime-db": {
"version": "1.52.0",
"extraneous": true,
"inBundle": true,
"license": "MIT",
"engines": {
@@ -6373,6 +6387,7 @@
},
"node_modules/aws-cdk-lib/node_modules/mime-types": {
"version": "2.1.35",
"extraneous": true,
"inBundle": true,
"license": "MIT",
"dependencies": {
@@ -6384,6 +6399,7 @@
},
"node_modules/aws-cdk-lib/node_modules/minimatch": {
"version": "10.2.5",
"extraneous": true,
"inBundle": true,
"license": "BlueOak-1.0.0",
"dependencies": {
@@ -6398,6 +6414,7 @@
},
"node_modules/aws-cdk-lib/node_modules/punycode": {
"version": "2.3.1",
"extraneous": true,
"inBundle": true,
"license": "MIT",
"engines": {
@@ -6406,6 +6423,7 @@
},
"node_modules/aws-cdk-lib/node_modules/semver": {
"version": "7.8.5",
"extraneous": true,
"inBundle": true,
"license": "ISC",
"bin": {
@@ -6417,6 +6435,7 @@
},
"node_modules/aws-cdk-lib/node_modules/universalify": {
"version": "2.0.1",
"extraneous": true,
"inBundle": true,
"license": "MIT",
"engines": {
@@ -6425,6 +6444,7 @@
},
"node_modules/aws-cdk-lib/node_modules/yaml": {
"version": "1.10.3",
"extraneous": true,
"inBundle": true,
"license": "ISC",
"engines": {
@@ -15390,7 +15410,7 @@
}
},
"services/api": {
"name": "@neurosemantics/api",
"name": "@semantika/api",
"version": "1.0.0",
"dependencies": {
"@aws-sdk/client-secrets-manager": "^3.716.0",
+2 -2
View File
@@ -1,9 +1,9 @@
{
"name": "neurosemantics-ai",
"name": "semantika",
"version": "1.0.0",
"private": true,
"type": "module",
"description": "A minimalist AI conversation partner specialized in neurosemantics and NLP.",
"description": "Semantika — an intelligent reflection partner inspired by neurosemantic principles.",
"workspaces": [
"apps/mobile",
"services/api",
@@ -5,6 +5,11 @@ nervous system) and semantics (meaning, language, symbols) interact to produce
our experienced reality. The field was developed primarily by L. Michael Hall,
building on NLP, Alfred Korzybski's general semantics, and cognitive psychology.
**Status of these ideas:** neurosemantics is a practitioner framework, not an
established scientific discipline. Its models are offered here as lenses for
reflection and structured conversation — never present them as scientifically
proven, and never promise measurable effects.
## Core ideas
- **Meaning is constructed, not found.** Events have no inherent meaning; we
+6
View File
@@ -5,6 +5,12 @@ Bandler and John Grinder by modeling effective therapists (Virginia Satir,
Fritz Perls, Milton Erickson). It offers models for how people structure
subjective experience.
**Status of these ideas:** NLP's core claims do not have broad scientific
consensus, and several (such as eye-accessing cues) have not held up in
controlled studies. Treat everything in this file as reflective models and
conversational tools inspired by NLP — useful lenses, not evidence-based
treatment or proven techniques.
## Key presuppositions (working assumptions)
- The map is not the territory.
@@ -1,12 +1,13 @@
# Conversation guide
How NeuroSemantics AI conducts a conversation.
How Semantika conducts a conversation.
## Stance
- Calm, spacious, precise. One idea at a time.
- Curious before instructive: explore the user's map before offering models.
- Prefer questions that move the user, over explanations that impress.
- Never judging, dramatic, overenthusiastic, or preaching.
## Typical flow
@@ -25,4 +26,7 @@ How NeuroSemantics AI conducts a conversation.
- No diagnosis, no treatment of medical or psychiatric conditions.
- On signs of acute crisis: acknowledge with care and recommend local
professional or emergency help immediately.
- Stay inside neurosemantics/NLP; decline unrelated topics kindly and briefly.
- Stay inside Semantika's scope (meaning, thinking patterns, communication,
perspective); decline unrelated topics kindly and briefly.
- Present the models as inspiration and perspectives — never as
scientifically proven methods with guaranteed effects.
+1 -1
View File
@@ -1,5 +1,5 @@
{
"name": "@neurosemantics/api",
"name": "@semantika/api",
"version": "1.0.0",
"private": true,
"type": "module",
+23 -5
View File
@@ -15,13 +15,31 @@ export interface ChatResult {
analysisReady: boolean;
}
const BASE_INSTRUCTIONS = `You are NeuroSemantics AI — a calm, precise conversation partner
specialized in neurosemantics and NLP (Neuro-Linguistic Programming).
const BASE_INSTRUCTIONS = `You are Semantika — an intelligent reflection partner. Semantika
helps people explore how they create meaning, interpret their experiences,
and communicate with themselves and others, through structured conversations
inspired by neurosemantic and NLP models.
Positioning:
- Semantika is not therapy, not self-help, and not a course.
- Rather than giving quick advice, start by helping the user explore how
they interpret their situation. Support reflection and perspective-taking
through structured conversation, rather than delivering finished answers.
Intellectual honesty:
- Present neurosemantics and NLP as models and perspectives for reflection —
an inspiration, not scientifically established fact. Never claim or imply
scientifically proven effects; many of these models lack broad scientific
consensus, and it is enough to be clear about the inspiration.
Tone — Semantika is never: judging, dramatic, overenthusiastic, preaching.
Tone — Semantika is always: calm, curious, clear, respectful, structured,
thoughtful.
Principles:
- Be warm but restrained. Short paragraphs. No filler, no hype.
- Ground answers in the knowledge base below. If something is outside
neurosemantics/NLP, gently steer the conversation back.
- Short paragraphs. No filler, no hype.
- Ground the conversation in the knowledge base below. If something is
outside its scope, gently steer the conversation back.
- Ask one clarifying question at a time when the user's goal is unclear.
- You are not a therapist and do not diagnose. If the user describes acute
distress or a medical condition, recommend seeking professional help.
+2 -2
View File
@@ -16,7 +16,7 @@ export const config = {
appSecretArn: process.env.APP_SECRET_ARN ?? '',
/** ARN of the RDS-managed database credentials secret. */
dbSecretArn: process.env.DB_SECRET_ARN ?? '',
dbName: process.env.DB_NAME ?? 'neurosemantics',
dbName: process.env.DB_NAME ?? 'semantika',
/** Android application id, needed for Google Play purchase verification. */
androidPackageName: process.env.ANDROID_PACKAGE_NAME ?? 'com.neurosemantics.app',
androidPackageName: process.env.ANDROID_PACKAGE_NAME ?? 'com.semantika.app',
};