@deina-labs/deina-core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +154 -0
- package/dist/archetype-card.d.ts +5 -0
- package/dist/archetype-card.d.ts.map +1 -0
- package/dist/archetype-card.js +239 -0
- package/dist/archetype-card.js.map +1 -0
- package/dist/archetypes.d.ts +3 -0
- package/dist/archetypes.d.ts.map +1 -0
- package/dist/archetypes.js +47 -0
- package/dist/archetypes.js.map +1 -0
- package/dist/classify.d.ts +9 -0
- package/dist/classify.d.ts.map +1 -0
- package/dist/classify.js +327 -0
- package/dist/classify.js.map +1 -0
- package/dist/coaching.d.ts +4 -0
- package/dist/coaching.d.ts.map +1 -0
- package/dist/coaching.js +107 -0
- package/dist/coaching.js.map +1 -0
- package/dist/deinas.d.ts +10 -0
- package/dist/deinas.d.ts.map +1 -0
- package/dist/deinas.js +55 -0
- package/dist/deinas.js.map +1 -0
- package/dist/fun-facts.d.ts +8 -0
- package/dist/fun-facts.d.ts.map +1 -0
- package/dist/fun-facts.js +30 -0
- package/dist/fun-facts.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/onboarding-content.d.ts +94 -0
- package/dist/onboarding-content.d.ts.map +1 -0
- package/dist/onboarding-content.js +96 -0
- package/dist/onboarding-content.js.map +1 -0
- package/dist/quiz-questions.d.ts +40 -0
- package/dist/quiz-questions.d.ts.map +1 -0
- package/dist/quiz-questions.js +336 -0
- package/dist/quiz-questions.js.map +1 -0
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +33 -0
- package/src/archetype-card.ts +248 -0
- package/src/archetypes.ts +54 -0
- package/src/classify.ts +336 -0
- package/src/coaching.ts +115 -0
- package/src/deinas.ts +77 -0
- package/src/fun-facts.ts +38 -0
- package/src/index.ts +38 -0
- package/src/onboarding-content.ts +102 -0
- package/src/quiz-questions.ts +479 -0
- package/src/types.ts +24 -0
package/README.md
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# @deina-labs/deina-core
|
|
2
|
+
|
|
3
|
+
Shared dating archetype logic, quiz data, onboarding content, and coaching characters for the Deina ecosystem. Used by the mobile app (React Native/Expo), web app, and Supabase edge functions.
|
|
4
|
+
|
|
5
|
+
**Zero runtime dependencies. Pure TypeScript data + logic.**
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
### Option 1: GitHub dependency (recommended for private repos)
|
|
10
|
+
|
|
11
|
+
In your consuming project's `package.json`:
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@deina-labs/deina-core": "github:joynOS/deina-core"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Then run:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
yarn install
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Option 2: Local development (linking)
|
|
28
|
+
|
|
29
|
+
If you're working on `deina-core` alongside another project locally:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# In deina-core/
|
|
33
|
+
yarn install
|
|
34
|
+
yarn build
|
|
35
|
+
|
|
36
|
+
# In your consuming project/
|
|
37
|
+
yarn add link:../deina-core
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Option 3: Supabase Edge Functions (Deno)
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
import { classifyArchetype, DATING_ARCHETYPES } from 'npm:@deina-labs/deina-core';
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
> For the npm: specifier to work, the package must be published to npm or use an import map pointing to the GitHub dependency.
|
|
47
|
+
|
|
48
|
+
## Build
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
yarn install
|
|
52
|
+
yarn build
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
This compiles `src/` to `dist/` with type declarations.
|
|
56
|
+
|
|
57
|
+
## What's inside
|
|
58
|
+
|
|
59
|
+
| File | What it exports |
|
|
60
|
+
|------|----------------|
|
|
61
|
+
| `types.ts` | `DatingArchetype`, `ArchetypeCoaching`, `UserPreferences` interfaces |
|
|
62
|
+
| `archetypes.ts` | `DATING_ARCHETYPES` — the 6 archetype definitions |
|
|
63
|
+
| `coaching.ts` | `ARCHETYPE_COACHING`, `buildArchetypeContext()` — coaching directives per archetype |
|
|
64
|
+
| `classify.ts` | `classifyArchetype()` — weighted scoring across all 5 quiz sections |
|
|
65
|
+
| `quiz-questions.ts` | `STANDARDS_QUALITIES`, `TIMELINE_QUESTIONS`, `MINDSET_QUESTIONS`, `ENFORCEMENT_QUESTIONS`, `TRADEOFF_QUESTIONS` |
|
|
66
|
+
| `fun-facts.ts` | `ONBOARDING_FUN_FACTS`, `SECTION_HINTS` — transition screen content |
|
|
67
|
+
| `onboarding-content.ts` | `DISCLAIMER_CONTENT`, `ABOUT_YOU_CONTENT`, `SECTION_INTROS`, `ARCHETYPE_REVEAL_CONTENT`, `MEET_DEINA_CONTENT`, `CHOOSE_DEINA_CONTENT`, `ACCOUNT_CREATION_CONTENT` |
|
|
68
|
+
| `deinas.ts` | `DEINA_CHARACTERS`, `getDeinaById()` — 7 coaching characters |
|
|
69
|
+
| `archetype-card.ts` | `renderArchetypePage()`, `renderNotFoundPage()` — HTML share card renderer |
|
|
70
|
+
|
|
71
|
+
## Usage
|
|
72
|
+
|
|
73
|
+
### Importing in React Native / Expo
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
import {
|
|
77
|
+
DATING_ARCHETYPES,
|
|
78
|
+
classifyArchetype,
|
|
79
|
+
STANDARDS_QUALITIES,
|
|
80
|
+
TIMELINE_QUESTIONS,
|
|
81
|
+
MINDSET_QUESTIONS,
|
|
82
|
+
ENFORCEMENT_QUESTIONS,
|
|
83
|
+
TRADEOFF_QUESTIONS,
|
|
84
|
+
} from '@deina-labs/deina-core';
|
|
85
|
+
|
|
86
|
+
// Classify a user's archetype from their quiz answers
|
|
87
|
+
const archetype = classifyArchetype({
|
|
88
|
+
standards: { physicalAttraction: 4, emotionalStability: 5, ... },
|
|
89
|
+
timelineAnswers: { progressionPace: 'Structured and steady', ... },
|
|
90
|
+
mindsetAnswers: { standardsConfidence: '4', ... },
|
|
91
|
+
enforcementAnswers: { cancelDowngrade: '1 time', ... },
|
|
92
|
+
tradeOffAnswers: { consistencyVsChemistry: 'Consistent effort even if chemistry builds slowly', ... },
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
console.log(archetype.name); // "The Strategic Dater"
|
|
96
|
+
console.log(archetype.signatureLine); // "You trust patterns more than promises."
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Using onboarding content
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
import {
|
|
103
|
+
DISCLAIMER_CONTENT,
|
|
104
|
+
SECTION_INTROS,
|
|
105
|
+
ABOUT_YOU_CONTENT,
|
|
106
|
+
} from '@deina-labs/deina-core';
|
|
107
|
+
|
|
108
|
+
// All screen copy is centralized — no hardcoded strings in your UI
|
|
109
|
+
<Text>{DISCLAIMER_CONTENT.heading}</Text>
|
|
110
|
+
<Text>{SECTION_INTROS.standards.body}</Text>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Coaching context for AI prompts
|
|
114
|
+
|
|
115
|
+
```ts
|
|
116
|
+
import { buildArchetypeContext } from '@deina-labs/deina-core';
|
|
117
|
+
|
|
118
|
+
const context = buildArchetypeContext('the-strategic-dater');
|
|
119
|
+
// Returns a formatted string with traits, pitfalls, and coaching directive
|
|
120
|
+
// ready to inject into a system prompt
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Deina characters
|
|
124
|
+
|
|
125
|
+
```ts
|
|
126
|
+
import { DEINA_CHARACTERS, getDeinaById } from '@deina-labs/deina-core';
|
|
127
|
+
|
|
128
|
+
const deina = getDeinaById('blonde');
|
|
129
|
+
console.log(deina.name); // "Chloe"
|
|
130
|
+
console.log(deina.tone); // "The Optimistic Strategist"
|
|
131
|
+
console.log(deina.systemPromptModifier); // system prompt personality modifier
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Share card HTML (edge functions)
|
|
135
|
+
|
|
136
|
+
```ts
|
|
137
|
+
import { renderArchetypePage, renderNotFoundPage } from '@deina-labs/deina-core';
|
|
138
|
+
|
|
139
|
+
// Returns a full HTML page string
|
|
140
|
+
const html = renderArchetypePage(archetype, 'Josephine');
|
|
141
|
+
const notFound = renderNotFoundPage();
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Architecture
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
Mobile App (Expo) ──┐
|
|
148
|
+
├──> @deina-labs/deina-core (this package)
|
|
149
|
+
Web App ──┤
|
|
150
|
+
│
|
|
151
|
+
Edge Functions ──┘
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
All quiz logic, archetype data, coaching content, and onboarding copy lives here. Consumer apps only handle UI rendering and platform-specific concerns.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DatingArchetype } from './types.js';
|
|
2
|
+
export declare function escapeHtml(str: string): string;
|
|
3
|
+
export declare function renderArchetypePage(archetype: DatingArchetype, name?: string): string;
|
|
4
|
+
export declare function renderNotFoundPage(): string;
|
|
5
|
+
//# sourceMappingURL=archetype-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archetype-card.d.ts","sourceRoot":"","sources":["../src/archetype-card.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO9C;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAiLrF;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAyD3C"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
export function escapeHtml(str) {
|
|
2
|
+
return str
|
|
3
|
+
.replace(/&/g, '&')
|
|
4
|
+
.replace(/</g, '<')
|
|
5
|
+
.replace(/>/g, '>')
|
|
6
|
+
.replace(/"/g, '"')
|
|
7
|
+
.replace(/'/g, ''');
|
|
8
|
+
}
|
|
9
|
+
export function renderArchetypePage(archetype, name) {
|
|
10
|
+
const displayName = archetype.name.replace(/^The /, '');
|
|
11
|
+
const escapedName = name ? escapeHtml(name) : '';
|
|
12
|
+
const escapedArchName = escapeHtml(archetype.name);
|
|
13
|
+
const escapedDisplayName = escapeHtml(displayName);
|
|
14
|
+
const escapedSignature = escapeHtml(archetype.signatureLine);
|
|
15
|
+
const escapedDescription = escapeHtml(archetype.description);
|
|
16
|
+
const pageTitle = name
|
|
17
|
+
? `${escapeHtml(name)} is ${escapedArchName} — Deina`
|
|
18
|
+
: `I'm ${escapedArchName} — Deina`;
|
|
19
|
+
const descriptionParagraphs = archetype.description
|
|
20
|
+
.split('\n\n')
|
|
21
|
+
.map((p) => `<p>${escapeHtml(p)}</p>`)
|
|
22
|
+
.join('');
|
|
23
|
+
const traitItems = archetype.traits
|
|
24
|
+
.map((t) => `<div class="trait">${escapeHtml(t)}</div>`)
|
|
25
|
+
.join('');
|
|
26
|
+
const rarityHtml = archetype.rarityNote
|
|
27
|
+
? `<div class="rarity">${escapeHtml(archetype.rarityNote)}</div>`
|
|
28
|
+
: '';
|
|
29
|
+
const nameLabel = escapedName
|
|
30
|
+
? `<div class="name-label">${escapedName}</div>`
|
|
31
|
+
: '';
|
|
32
|
+
return `<!DOCTYPE html>
|
|
33
|
+
<html lang="en">
|
|
34
|
+
<head>
|
|
35
|
+
<meta charset="UTF-8">
|
|
36
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
37
|
+
<title>${pageTitle}</title>
|
|
38
|
+
<meta property="og:title" content="${pageTitle}">
|
|
39
|
+
<meta property="og:description" content="${escapedSignature}">
|
|
40
|
+
<meta property="og:type" content="profile">
|
|
41
|
+
<meta name="twitter:card" content="summary">
|
|
42
|
+
<meta name="twitter:title" content="${pageTitle}">
|
|
43
|
+
<meta name="twitter:description" content="${escapedSignature}">
|
|
44
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
45
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
46
|
+
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;0,900;1,400;1,700&family=DM+Sans:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
47
|
+
<style>
|
|
48
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
49
|
+
body {
|
|
50
|
+
font-family: 'DM Sans', sans-serif;
|
|
51
|
+
background: #ffffff;
|
|
52
|
+
display: flex;
|
|
53
|
+
justify-content: center;
|
|
54
|
+
padding: 24px 16px;
|
|
55
|
+
min-height: 100vh;
|
|
56
|
+
}
|
|
57
|
+
.container {
|
|
58
|
+
max-width: 420px;
|
|
59
|
+
width: 100%;
|
|
60
|
+
}
|
|
61
|
+
.card {
|
|
62
|
+
background: linear-gradient(180deg, #8B1A1A 0%, #5C1010 60%, #3D0A0A 100%);
|
|
63
|
+
border-radius: 20px;
|
|
64
|
+
box-shadow: 0 12px 40px rgba(116, 25, 25, 0.25);
|
|
65
|
+
animation: fadeIn 0.8s ease-out;
|
|
66
|
+
}
|
|
67
|
+
.card-inner {
|
|
68
|
+
margin: 12px;
|
|
69
|
+
border: 1px solid rgba(255, 255, 255, 0.15);
|
|
70
|
+
border-radius: 14px;
|
|
71
|
+
padding: 32px 24px;
|
|
72
|
+
text-align: center;
|
|
73
|
+
color: #ffffff;
|
|
74
|
+
}
|
|
75
|
+
.logo {
|
|
76
|
+
font-family: 'Playfair Display', serif;
|
|
77
|
+
font-size: 14px;
|
|
78
|
+
font-weight: 700;
|
|
79
|
+
color: rgba(255, 255, 255, 0.45);
|
|
80
|
+
letter-spacing: 5px;
|
|
81
|
+
margin-bottom: 20px;
|
|
82
|
+
}
|
|
83
|
+
.name-label {
|
|
84
|
+
font-size: 11px;
|
|
85
|
+
font-weight: 600;
|
|
86
|
+
text-transform: uppercase;
|
|
87
|
+
letter-spacing: 2.5px;
|
|
88
|
+
color: rgba(255, 255, 255, 0.4);
|
|
89
|
+
margin-bottom: 8px;
|
|
90
|
+
}
|
|
91
|
+
.archetype-name {
|
|
92
|
+
font-family: 'Playfair Display', serif;
|
|
93
|
+
font-size: 36px;
|
|
94
|
+
font-weight: 900;
|
|
95
|
+
margin-bottom: 20px;
|
|
96
|
+
}
|
|
97
|
+
.divider {
|
|
98
|
+
width: 36px;
|
|
99
|
+
height: 1px;
|
|
100
|
+
background: rgba(255, 255, 255, 0.15);
|
|
101
|
+
margin: 20px auto;
|
|
102
|
+
}
|
|
103
|
+
.trait {
|
|
104
|
+
font-family: 'Playfair Display', serif;
|
|
105
|
+
font-size: 18px;
|
|
106
|
+
color: rgba(255, 255, 255, 0.9);
|
|
107
|
+
margin-bottom: 6px;
|
|
108
|
+
}
|
|
109
|
+
.description p {
|
|
110
|
+
font-size: 13px;
|
|
111
|
+
color: rgba(255, 255, 255, 0.75);
|
|
112
|
+
line-height: 1.6;
|
|
113
|
+
margin-bottom: 12px;
|
|
114
|
+
}
|
|
115
|
+
.signature {
|
|
116
|
+
font-family: 'Playfair Display', serif;
|
|
117
|
+
font-style: italic;
|
|
118
|
+
font-size: 16px;
|
|
119
|
+
font-weight: 700;
|
|
120
|
+
color: #ffffff;
|
|
121
|
+
margin-top: 20px;
|
|
122
|
+
}
|
|
123
|
+
.rarity {
|
|
124
|
+
font-size: 11px;
|
|
125
|
+
font-style: italic;
|
|
126
|
+
color: rgba(255, 255, 255, 0.4);
|
|
127
|
+
margin-top: 12px;
|
|
128
|
+
}
|
|
129
|
+
.footer {
|
|
130
|
+
font-size: 9px;
|
|
131
|
+
font-weight: 700;
|
|
132
|
+
letter-spacing: 3px;
|
|
133
|
+
color: rgba(255, 255, 255, 0.25);
|
|
134
|
+
margin-top: 24px;
|
|
135
|
+
}
|
|
136
|
+
.cta {
|
|
137
|
+
text-align: center;
|
|
138
|
+
margin-top: 24px;
|
|
139
|
+
}
|
|
140
|
+
.cta a {
|
|
141
|
+
display: inline-block;
|
|
142
|
+
background: #741919;
|
|
143
|
+
color: #ffffff;
|
|
144
|
+
font-family: 'DM Sans', sans-serif;
|
|
145
|
+
font-size: 14px;
|
|
146
|
+
font-weight: 600;
|
|
147
|
+
padding: 12px 32px;
|
|
148
|
+
border-radius: 999px;
|
|
149
|
+
text-decoration: none;
|
|
150
|
+
}
|
|
151
|
+
@keyframes fadeIn {
|
|
152
|
+
from { opacity: 0; transform: translateY(12px); }
|
|
153
|
+
to { opacity: 1; transform: translateY(0); }
|
|
154
|
+
}
|
|
155
|
+
</style>
|
|
156
|
+
</head>
|
|
157
|
+
<body>
|
|
158
|
+
<div class="container">
|
|
159
|
+
<div class="card">
|
|
160
|
+
<div class="card-inner">
|
|
161
|
+
<div class="logo">DEINA</div>
|
|
162
|
+
${nameLabel}
|
|
163
|
+
<div class="archetype-name">${escapedDisplayName}</div>
|
|
164
|
+
<div class="divider"></div>
|
|
165
|
+
${traitItems}
|
|
166
|
+
<div class="divider"></div>
|
|
167
|
+
<div class="description">${descriptionParagraphs}</div>
|
|
168
|
+
<div class="divider"></div>
|
|
169
|
+
<div class="signature">${escapedSignature}</div>
|
|
170
|
+
${rarityHtml}
|
|
171
|
+
<div class="footer">DATING ARCHETYPE</div>
|
|
172
|
+
</div>
|
|
173
|
+
</div>
|
|
174
|
+
<div class="cta">
|
|
175
|
+
<a href="https://apps.apple.com/app/deina">Discover yours</a>
|
|
176
|
+
</div>
|
|
177
|
+
</div>
|
|
178
|
+
</body>
|
|
179
|
+
</html>`;
|
|
180
|
+
}
|
|
181
|
+
export function renderNotFoundPage() {
|
|
182
|
+
return `<!DOCTYPE html>
|
|
183
|
+
<html lang="en">
|
|
184
|
+
<head>
|
|
185
|
+
<meta charset="UTF-8">
|
|
186
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
187
|
+
<title>Not Found — Deina</title>
|
|
188
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
189
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
190
|
+
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700;900&family=DM+Sans:wght@400;500;600&display=swap" rel="stylesheet">
|
|
191
|
+
<style>
|
|
192
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
193
|
+
body {
|
|
194
|
+
font-family: 'DM Sans', sans-serif;
|
|
195
|
+
background: #ffffff;
|
|
196
|
+
display: flex;
|
|
197
|
+
justify-content: center;
|
|
198
|
+
align-items: center;
|
|
199
|
+
min-height: 100vh;
|
|
200
|
+
padding: 24px;
|
|
201
|
+
text-align: center;
|
|
202
|
+
}
|
|
203
|
+
.content {
|
|
204
|
+
max-width: 360px;
|
|
205
|
+
}
|
|
206
|
+
h1 {
|
|
207
|
+
font-family: 'Playfair Display', serif;
|
|
208
|
+
font-size: 28px;
|
|
209
|
+
font-weight: 900;
|
|
210
|
+
color: #741919;
|
|
211
|
+
margin-bottom: 12px;
|
|
212
|
+
}
|
|
213
|
+
p {
|
|
214
|
+
font-size: 14px;
|
|
215
|
+
color: #666;
|
|
216
|
+
margin-bottom: 24px;
|
|
217
|
+
}
|
|
218
|
+
a {
|
|
219
|
+
display: inline-block;
|
|
220
|
+
background: #741919;
|
|
221
|
+
color: #ffffff;
|
|
222
|
+
font-size: 14px;
|
|
223
|
+
font-weight: 600;
|
|
224
|
+
padding: 12px 32px;
|
|
225
|
+
border-radius: 999px;
|
|
226
|
+
text-decoration: none;
|
|
227
|
+
}
|
|
228
|
+
</style>
|
|
229
|
+
</head>
|
|
230
|
+
<body>
|
|
231
|
+
<div class="content">
|
|
232
|
+
<h1>Archetype not found</h1>
|
|
233
|
+
<p>This link may have expired or doesn't exist.</p>
|
|
234
|
+
<a href="https://apps.apple.com/app/deina">Discover yours</a>
|
|
235
|
+
</div>
|
|
236
|
+
</body>
|
|
237
|
+
</html>`;
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=archetype-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archetype-card.js","sourceRoot":"","sources":["../src/archetype-card.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAA0B,EAAE,IAAa;IAC3E,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,kBAAkB,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,gBAAgB,GAAG,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC7D,MAAM,kBAAkB,GAAG,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAE7D,MAAM,SAAS,GAAG,IAAI;QACpB,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,eAAe,UAAU;QACrD,CAAC,CAAC,OAAO,eAAe,UAAU,CAAC;IAErC,MAAM,qBAAqB,GAAG,SAAS,CAAC,WAAW;SAChD,KAAK,CAAC,MAAM,CAAC;SACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;SACrC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM;SAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;SACvD,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU;QACrC,CAAC,CAAC,uBAAuB,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ;QACjE,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,SAAS,GAAG,WAAW;QAC3B,CAAC,CAAC,2BAA2B,WAAW,QAAQ;QAChD,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;;;WAKE,SAAS;uCACmB,SAAS;6CACH,gBAAgB;;;wCAGrB,SAAS;8CACH,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAuHpD,SAAS;sCACmB,kBAAkB;;UAE9C,UAAU;;mCAEe,qBAAqB;;iCAEvB,gBAAgB;UACvC,UAAU;;;;;;;;;QASZ,CAAC;AACT,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAuDD,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archetypes.d.ts","sourceRoot":"","sources":["../src/archetypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,eAAO,MAAM,iBAAiB,EAAE,eAAe,EAmD9C,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export const DATING_ARCHETYPES = [
|
|
2
|
+
{
|
|
3
|
+
id: 'the-strategic-dater',
|
|
4
|
+
name: 'The Strategic Dater',
|
|
5
|
+
traits: ['Strategic', 'Observant', 'Selective', 'Standards-Driven'],
|
|
6
|
+
description: 'A Strategic Dater approaches relationships with clarity and intention. Rather than relying only on chemistry, they pay close attention to patterns — how consistently someone shows up, follows through, and invests over time. Effort, reliability, and emotional maturity matter just as much as attraction.\n\nBecause they evaluate behavior carefully before investing emotionally, Strategic Daters are less likely to stay in chaotic or ambiguous relationships. At times, however, their instinct to analyze connections quickly can make slower-building chemistry easy to overlook.',
|
|
7
|
+
signatureLine: 'You trust patterns more than promises.',
|
|
8
|
+
rarityNote: 'One of the most selective dating styles.',
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
id: 'the-hopeful-romantic',
|
|
12
|
+
name: 'The Hopeful Romantic',
|
|
13
|
+
traits: ['Open', 'Connection-Driven', 'Expressive', 'Optimistic'],
|
|
14
|
+
description: 'Hopeful Romantics approach dating with warmth and emotional openness. They believe meaningful relationships often begin with genuine chemistry and emotional connection. When they feel excited about someone, they are naturally willing to explore where the relationship might lead.\n\nTheir ability to build connection quickly can create deeply meaningful relationships. However, because they see potential easily, Hopeful Romantics may occasionally assume long-term compatibility before consistent effort is proven.',
|
|
15
|
+
signatureLine: 'You believe the right connection can change everything.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: 'the-thoughtful-evaluator',
|
|
19
|
+
name: 'The Thoughtful Evaluator',
|
|
20
|
+
traits: ['Reflective', 'Patient', 'Observant', 'Measured'],
|
|
21
|
+
description: 'Thoughtful Evaluators prefer to understand someone fully before investing emotionally. Rather than rushing into connection, they observe patterns carefully and allow compatibility to reveal itself over time.\n\nThis patience often protects them from emotionally chaotic relationships. At times, however, their cautious approach can slow the emotional momentum of promising connections.',
|
|
22
|
+
signatureLine: "You watch what people do — not just what they say.",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 'the-compassionate-partner',
|
|
26
|
+
name: 'The Compassionate Partner',
|
|
27
|
+
traits: ['Empathetic', 'Supportive', 'Emotionally Aware', 'Loyal'],
|
|
28
|
+
description: 'Compassionate Partners naturally invest in building emotional connection with the people they date. Their empathy and emotional intelligence allow them to understand others deeply and create strong bonds.\n\nBecause they care about people genuinely, they often bring warmth and stability to relationships. However, their desire to understand and support others can sometimes lead them to give connections more chances than they deserve.',
|
|
29
|
+
signatureLine: "You see the good in people — sometimes before they've earned it.",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: 'the-independent-chooser',
|
|
33
|
+
name: 'The Independent Chooser',
|
|
34
|
+
traits: ['Independent', 'Self-Assured', 'Selective', 'Grounded'],
|
|
35
|
+
description: 'Independent Choosers approach dating from a place of stability rather than urgency. Their life already feels full and meaningful, so relationships are something they want rather than something they rely on.\n\nBecause they are not dating from scarcity, they tend to evaluate partners with clarity and strong standards. At times, however, their independence can make it harder for others to recognize when they are earning deeper emotional access.',
|
|
36
|
+
signatureLine: "You don't need a relationship — you choose one.",
|
|
37
|
+
rarityNote: 'A dating style often found among highly independent people.',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: 'the-intentional-builder',
|
|
41
|
+
name: 'The Intentional Builder',
|
|
42
|
+
traits: ['Purpose-Driven', 'Future-Oriented', 'Committed', 'Relationship-Focused'],
|
|
43
|
+
description: "Intentional Builders approach dating with a clear desire to build a meaningful partnership. They value consistency, emotional maturity, and shared vision for the future.\n\nTheir clarity about what they want often helps them identify partners who are serious about building something lasting. At times, however, their focus on long-term potential can make promising connections feel especially important early on.",
|
|
44
|
+
signatureLine: "You're not just dating — you're building something.",
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
//# sourceMappingURL=archetypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archetypes.js","sourceRoot":"","sources":["../src/archetypes.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD;QACE,EAAE,EAAE,qBAAqB;QACzB,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,CAAC;QACnE,WAAW,EACT,gkBAAgkB;QAClkB,aAAa,EAAE,wCAAwC;QACvD,UAAU,EAAE,0CAA0C;KACvD;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,YAAY,EAAE,YAAY,CAAC;QACjE,WAAW,EACT,ogBAAogB;QACtgB,aAAa,EAAE,yDAAyD;KACzE;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,IAAI,EAAE,0BAA0B;QAChC,MAAM,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC;QAC1D,WAAW,EACT,mYAAmY;QACrY,aAAa,EAAE,oDAAoD;KACpE;IACD;QACE,EAAE,EAAE,2BAA2B;QAC/B,IAAI,EAAE,2BAA2B;QACjC,MAAM,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,OAAO,CAAC;QAClE,WAAW,EACT,sbAAsb;QACxb,aAAa,EAAE,kEAAkE;KAClF;IACD;QACE,EAAE,EAAE,yBAAyB;QAC7B,IAAI,EAAE,yBAAyB;QAC/B,MAAM,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,CAAC;QAChE,WAAW,EACT,gcAAgc;QAClc,aAAa,EAAE,iDAAiD;QAChE,UAAU,EAAE,6DAA6D;KAC1E;IACD;QACE,EAAE,EAAE,yBAAyB;QAC7B,IAAI,EAAE,yBAAyB;QAC/B,MAAM,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,sBAAsB,CAAC;QAClF,WAAW,EACT,+ZAA+Z;QACja,aAAa,EAAE,qDAAqD;KACrE;CACF,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DatingArchetype } from './types.js';
|
|
2
|
+
export declare function classifyArchetype(answers: {
|
|
3
|
+
standards: Record<string, number | null>;
|
|
4
|
+
timelineAnswers: Record<string, string | null>;
|
|
5
|
+
mindsetAnswers?: Record<string, string | null>;
|
|
6
|
+
enforcementAnswers: Record<string, string | null>;
|
|
7
|
+
tradeOffAnswers: Record<string, string | null>;
|
|
8
|
+
}): DatingArchetype;
|
|
9
|
+
//# sourceMappingURL=classify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../src/classify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAClD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CAChD,GAAG,eAAe,CAsUlB"}
|