Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions CODE_IMPLEMENTATION_PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ async function testCloudant() {
const testDoc = {
_id: 'test_' + Date.now(),
type: 'test',
message: 'Hello from Her.comeback.ai'
message: 'Hello from SheCodes.AI'
};

await client.postDocument({
Expand All @@ -102,7 +102,7 @@ async function testCloudant() {
import { generateText } from '../lib/watsonx/client';

async function testWatsonx() {
const prompt = 'Hello, this is a test message for Her.comeback.ai';
const prompt = 'Hello, this is a test message for SheCodes.AI';
const response = await generateText(prompt);

console.log('Prompt:', prompt);
Expand Down Expand Up @@ -279,13 +279,13 @@ ibmcloud login --apikey ApiKey-ba67cf82-ab15-407a-818e-6999dbfeba72 -r us-south
ibmcloud resource service-instances

# 4. Create Cloudant (if needed)
ibmcloud resource service-instance-create her-cloudant-db cloudantnosqldb lite us-south
ibmcloud resource service-instance-create shecodes-cloudant-db cloudantnosqldb lite us-south

# 5. Create credentials
ibmcloud resource service-key-create her-cloudant-credentials Manager --instance-name her-cloudant-db
ibmcloud resource service-key-create shecodes-cloudant-credentials Manager --instance-name shecodes-cloudant-db

# 6. Get credentials
ibmcloud resource service-key her-cloudant-credentials --output json
ibmcloud resource service-key shecodes-cloudant-credentials --output json

# 7. Install dependencies
npm install tsx --save-dev
Expand Down
2 changes: 1 addition & 1 deletion IBM_CLOUD_SETUP.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# IBM Cloud Integration Plan for Her.comeback.ai
# IBM Cloud Integration Plan for SheCodes.AI

## Overview
This document outlines the complete setup process for integrating IBM Cloud services (Cloudant NoSQL Database and watsonx.ai) with the Her platform - an AI companion for mothers navigating life transitions.
Expand Down
20 changes: 10 additions & 10 deletions IMPLEMENTATION_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,18 +79,18 @@ ibmcloud resource service-instances --service-name pm-20

```bash
# Create Cloudant instance (Lite plan - free)
ibmcloud resource service-instance-create her-cloudant-db \
ibmcloud resource service-instance-create shecodes-cloudant-db \
cloudantnosqldb lite us-south

# Wait for provisioning (check status)
ibmcloud resource service-instance her-cloudant-db
ibmcloud resource service-instance shecodes-cloudant-db

# Create service credentials
ibmcloud resource service-key-create her-cloudant-credentials \
Manager --instance-name her-cloudant-db
ibmcloud resource service-key-create shecodes-cloudant-credentials \
Manager --instance-name shecodes-cloudant-db

# Retrieve credentials
ibmcloud resource service-key her-cloudant-credentials --output json
ibmcloud resource service-key shecodes-cloudant-credentials --output json
```

**Copy the following from the output:**
Expand All @@ -102,7 +102,7 @@ ibmcloud resource service-key her-cloudant-credentials --output json
### Option A: Using IBM Cloud Console (Recommended)
1. Go to https://dataplatform.cloud.ibm.com/
2. Click "Create a project" → "Create an empty project"
3. Name it "Her AI Platform"
3. Name it "SheCodes AI Platform"
4. Note the Project ID from the project settings
5. Update `WATSONX_PROJECT_ID` in `.env.local`

Expand All @@ -112,15 +112,15 @@ ibmcloud resource service-key her-cloudant-credentials --output json
ibmcloud plugin install machine-learning

# Create Watson Machine Learning instance
ibmcloud resource service-instance-create her-watsonx-ml \
ibmcloud resource service-instance-create shecodes-watsonx-ml \
pm-20 lite us-south

# Create service credentials
ibmcloud resource service-key-create her-watsonx-credentials \
Manager --instance-name her-watsonx-ml
ibmcloud resource service-key-create shecodes-watsonx-credentials \
Manager --instance-name shecodes-watsonx-ml

# Retrieve credentials
ibmcloud resource service-key her-watsonx-credentials --output json
ibmcloud resource service-key shecodes-watsonx-credentials --output json
```

**Update `.env.local`:**
Expand Down
2 changes: 1 addition & 1 deletion PLANNING_SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## 📋 Planning Phase Complete

This document summarizes the planning work completed for integrating IBM Cloud services with Her.comeback.ai.
This document summarizes the planning work completed for integrating IBM Cloud services with SheCodes.AI.

## ✅ Completed Planning Tasks

Expand Down
8 changes: 4 additions & 4 deletions QUICK_START.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,14 @@ ibmcloud resource service-instances --service-name pm-20

**Cloudant:**
```bash
ibmcloud resource service-instance-create her-cloudant-db cloudantnosqldb lite us-south
ibmcloud resource service-key-create her-cloudant-credentials Manager --instance-name her-cloudant-db
ibmcloud resource service-key her-cloudant-credentials --output json
ibmcloud resource service-instance-create shecodes-cloudant-db cloudantnosqldb lite us-south
ibmcloud resource service-key-create shecodes-cloudant-credentials Manager --instance-name shecodes-cloudant-db
ibmcloud resource service-key shecodes-cloudant-credentials --output json
```

**watsonx.ai:**
- Go to https://dataplatform.cloud.ibm.com/
- Create project → "Her AI Platform"
- Create project → "SheCodes AI Platform"
- Copy Project ID

### 6. Update `.env.local`
Expand Down
6 changes: 3 additions & 3 deletions RUN_SUMMARY.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Her.comeback.ai - Run Summary & Status Report
# SheCodes.AI - Run Summary & Status Report

**Date**: May 2, 2026
**Status**: ✅ Application Running Successfully
Expand Down Expand Up @@ -57,7 +57,7 @@

**Quick Steps**:
1. Go to https://dataplatform.cloud.ibm.com/
2. Create project "Her AI Platform"
2. Create project "SheCodes AI Platform"
3. Copy Project ID
4. Update `.env.local`:
```bash
Expand Down Expand Up @@ -322,8 +322,8 @@ npm run test:ai
---

## 🎊 Summary
**Your SheCodes.AI application is running successfully!**

**Your Her.comeback.ai application is running successfully!**

✅ **What's Ready**:
- Development server on port 3002
Expand Down
2 changes: 1 addition & 1 deletion TEST_REPORT.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Her.comeback.ai - Test Report
# SheCodes.AI - Test Report

**Date**: May 2, 2026
**Test Environment**: Local Development
Expand Down
16 changes: 8 additions & 8 deletions WATSONX_SETUP_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ This guide will help you set up IBM watsonx.ai to enable real AI-powered respons
2. Click **"New project"** button
3. Select **"Create an empty project"**
4. Fill in project details:
- **Name**: `Her AI Platform`
- **Description**: `AI companion for mothers - Her.comeback.ai`
- **Name**: `SheCodes AI Platform`
- **Description**: `AI companion for mothers - SheCodes.AI`
- **Storage**: Select existing Cloud Object Storage or create new
5. Click **"Create"**

Expand Down Expand Up @@ -111,21 +111,21 @@ ibmcloud plugin install machine-learning
#### Step 4: Create Watson Machine Learning Instance
```bash
# Create instance (Lite plan - free)
ibmcloud resource service-instance-create her-watsonx-ml \
ibmcloud resource service-instance-create shecodes-watsonx-ml \
pm-20 lite us-south

# Wait for provisioning
ibmcloud resource service-instance her-watsonx-ml
ibmcloud resource service-instance shecodes-watsonx-ml
```

#### Step 5: Create Service Credentials
```bash
# Create credentials
ibmcloud resource service-key-create her-watsonx-credentials \
Manager --instance-name her-watsonx-ml
ibmcloud resource service-key-create shecodes-watsonx-credentials \
Manager --instance-name shecodes-watsonx-ml

# Get credentials
ibmcloud resource service-key her-watsonx-credentials --output json
ibmcloud resource service-key shecodes-watsonx-credentials --output json
```

#### Step 6: Create Project via API
Expand All @@ -138,7 +138,7 @@ curl -X POST "https://api.dataplatform.cloud.ibm.com/v2/projects" \
-H "Authorization: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Her AI Platform",
"name": "SheCodes AI Platform",
"description": "AI companion for mothers",
"storage": {
"type": "bmcos_object_storage",
Expand Down
32 changes: 4 additions & 28 deletions __tests__/integration/api-data-route.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,41 +5,17 @@

import { POST } from '@/app/api/data/route';
import { createMockRequest } from '../utils/test-helpers';
import { mockUser, mockAssessment, mockJournal } from '../mocks/test-data';

// Mock the Cloudant database functions
jest.mock('@/lib/cloudant/db', () => ({
initializeDatabases: jest.fn().mockResolvedValue(true),
saveUser: jest.fn().mockResolvedValue(true),
getUser: jest.fn().mockResolvedValue({
_id: 'test_user_001',
email: 'test@example.com',
name: 'Test Mother',
mumType: 'returning_to_work',
createdAt: '2024-01-01T00:00:00.000Z',
}),
getUser: jest.fn().mockResolvedValue(mockUser),
saveAssessment: jest.fn().mockResolvedValue(true),
getLatestAssessment: jest.fn().mockResolvedValue({
_id: 'assessment_001',
userId: 'test_user_001',
scores: {
health: 7,
mind: 6,
relationships: 8,
work: 5,
nourish: 7,
},
aiInsights: 'You are doing great! Focus on work-life balance.',
createdAt: '2024-01-01T00:00:00.000Z',
}),
getLatestAssessment: jest.fn().mockResolvedValue(mockAssessment),
saveJournalEntry: jest.fn().mockResolvedValue(true),
getJournals: jest.fn().mockResolvedValue([{
_id: 'journal_001',
userId: 'test_user_001',
entry: 'Today was challenging but I managed to stay positive.',
mood: 7,
aiReflection: 'Your resilience is admirable. Keep focusing on the positive.',
createdAt: '2024-01-01T00:00:00.000Z',
}])
getJournals: jest.fn().mockResolvedValue([mockJournal])
}));

describe('/api/data Route - Integration Tests', () => {
Expand Down
4 changes: 2 additions & 2 deletions app/about/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export default function AboutPage() {
<div style={{ background: "var(--bg-primary)", minHeight: "100vh" }}>
{/* MINIMAL NAVBAR */}
<nav style={{ padding: "16px 40px", display: "flex", justifyContent: "space-between", alignItems: "center", borderBottom: "1px solid var(--border-color)" }}>
<Link href="/" style={{ fontSize: 24, fontWeight: 700, letterSpacing: "-0.04em", textDecoration: "none", color: "var(--text-primary)" }}>Her.</Link>
<Link href="/" style={{ fontSize: 24, fontWeight: 700, letterSpacing: "-0.04em", textDecoration: "none", color: "var(--text-primary)" }}>SheCodes.AI</Link>
<div style={{ display: "flex", gap: 32, alignItems: "center", fontSize: 14, fontWeight: 500, color: "var(--text-secondary)" }}>
<Link href="/about" style={{ textDecoration: "none", color: "var(--text-primary)", fontWeight: 600 }}>About</Link>
<Link href="/blog" style={{ textDecoration: "none", color: "inherit" }}>Stories</Link>
Expand All @@ -22,7 +22,7 @@ export default function AboutPage() {

<div style={{ fontSize: 18, color: "var(--text-secondary)", lineHeight: 1.6, display: "flex", flexDirection: "column", gap: 24 }}>
<p>
When we built Her., we looked at the landscape of tools available to mothers. We found endless trackers that caused anxiety, social feeds that induced guilt, and a total lack of tools to help women rebuild their professional identities.
When we built SheCodes.AI, we looked at the landscape of tools available to mothers. We found endless trackers that caused anxiety, social feeds that induced guilt, and a total lack of tools to help women rebuild their professional identities.
</p>
<p>
We decided to change that. By integrating IBM watsonx and IBM Cloudant, we built a private, intelligent ecosystem. A place where you can safely brain-dump your exhaustion, where an AI can read your 3-year career gap and write a stunning resume summary, and where your data actually belongs to you.
Expand Down
4 changes: 2 additions & 2 deletions app/assessment/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { useRouter } from "next/navigation";
import Link from "next/link";

const assessmentSteps = [
{ id: 1, title: "Welcome to Her.", question: "What is your name?", type: "text", key: "name" },
{ id: 1, title: "Welcome to SheCodes.AI", question: "What is your name?", type: "text", key: "name" },
{ id: 2, title: "Your Season", question: "Which best describes your current season of motherhood?", type: "options", key: "mumType", options: ["New Mother (0-1 yr)", "Toddler Years (1-3 yrs)", "School Age (4+ yrs)", "Career Break", "Working Mother"] },
{ id: 3, title: "Mental Load", question: "How often do you feel overwhelmed by the invisible mental load?", type: "slider", key: "mind", min: 1, max: 10, leftLabel: "Rarely", rightLabel: "Constantly" },
{ id: 4, title: "Identity", question: "Do you feel connected to who you were before motherhood?", type: "slider", key: "identity", min: 1, max: 10, leftLabel: "Lost myself", rightLabel: "Fully connected" },
Expand Down Expand Up @@ -73,7 +73,7 @@ export default function AssessmentPage() {
<div className="hero-bg" style={{ minHeight: "100vh", display: "flex", flexDirection: "column" }}>
{/* HEADER */}
<header style={{ padding: "20px 40px", display: "flex", alignItems: "center", justifyContent: "space-between", background: "var(--bg-glass-strong)", backdropFilter: "blur(20px)", borderBottom: "1px solid var(--border-color)" }}>
<Link href="/" style={{ fontSize: 22, fontWeight: 800, textDecoration: "none", color: "var(--accent-rose)" }}>Her.</Link>
<Link href="/" style={{ fontSize: 22, fontWeight: 800, textDecoration: "none", color: "var(--accent-rose)" }}>SheCodes.AI</Link>
<div style={{ width: 200, height: 4, background: "var(--bg-tertiary)", borderRadius: 2, overflow: "hidden" }}>
<div style={{ width: `${progress}%`, height: "100%", background: "var(--gradient-rose)", transition: "width 0.4s ease" }} />
</div>
Expand Down
2 changes: 1 addition & 1 deletion app/blog/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export default function BlogPage() {
<div style={{ background: "var(--bg-primary)", minHeight: "100vh" }}>
{/* MINIMAL NAVBAR */}
<nav style={{ padding: "16px 40px", display: "flex", justifyContent: "space-between", alignItems: "center", borderBottom: "1px solid var(--border-color)" }}>
<Link href="/" style={{ fontSize: 24, fontWeight: 700, letterSpacing: "-0.04em", textDecoration: "none", color: "var(--text-primary)" }}>Her.</Link>
<Link href="/" style={{ fontSize: 24, fontWeight: 700, letterSpacing: "-0.04em", textDecoration: "none", color: "var(--text-primary)" }}>SheCodes.AI</Link>
<div style={{ display: "flex", gap: 32, alignItems: "center", fontSize: 14, fontWeight: 500, color: "var(--text-secondary)" }}>
<Link href="/about" style={{ textDecoration: "none", color: "inherit" }}>About</Link>
<Link href="/blog" style={{ textDecoration: "none", color: "var(--text-primary)", fontWeight: 600 }}>Stories</Link>
Expand Down
2 changes: 1 addition & 1 deletion app/contact/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export default function ContactPage() {
<div style={{ background: "var(--bg-primary)", minHeight: "100vh" }}>
{/* MINIMAL NAVBAR */}
<nav style={{ padding: "16px 40px", display: "flex", justifyContent: "space-between", alignItems: "center", borderBottom: "1px solid var(--border-color)" }}>
<Link href="/" style={{ fontSize: 24, fontWeight: 700, letterSpacing: "-0.04em", textDecoration: "none", color: "var(--text-primary)" }}>Her.</Link>
<Link href="/" style={{ fontSize: 24, fontWeight: 700, letterSpacing: "-0.04em", textDecoration: "none", color: "var(--text-primary)" }}>SheCodes.AI</Link>
<div style={{ display: "flex", gap: 32, alignItems: "center", fontSize: 14, fontWeight: 500, color: "var(--text-secondary)" }}>
<Link href="/about" style={{ textDecoration: "none", color: "inherit" }}>About</Link>
<Link href="/blog" style={{ textDecoration: "none", color: "inherit" }}>Stories</Link>
Expand Down
2 changes: 1 addition & 1 deletion app/mind/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ export default function MindPage() {
<div style={{ maxWidth: 800, margin: "0 auto" }}>
<div style={{ marginBottom: 32 }}>
<div className="badge" style={{ marginBottom: 12 }}>🧠 Mind Module</div>
<h1 style={{ fontSize: 32, fontWeight: 700, letterSpacing: "-0.03em", marginBottom: 8 }}>Her Mind</h1>
<h1 style={{ fontSize: 32, fontWeight: 700, letterSpacing: "-0.03em", marginBottom: 8 }}>SheCodes Mind</h1>
<p style={{ fontSize: 17, color: "var(--text-secondary)" }}>
A secure space to unpack the invisible load. Processed by IBM watsonx.
</p>
Expand Down
6 changes: 3 additions & 3 deletions lib/watsonx/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ export async function generateLifeAssessment(data: {
scores: Record<string, number>;
name: string;
}): Promise<string> {
const prompt = `You are an empathetic AI companion for mothers named Her. A ${data.mumType} named ${data.name} has completed their life assessment with these scores (out of 10): ${JSON.stringify(data.scores)}. Write a warm, encouraging 3-sentence assessment that: 1) validates her current state, 2) identifies her top strength, 3) gives one gentle next step. Do not use clinical language. Sound like a wise, caring friend.`;
const prompt = `You are an empathetic AI companion for mothers named SheCodes.AI. A ${data.mumType} named ${data.name} has completed their life assessment with these scores (out of 10): ${JSON.stringify(data.scores)}. Write a warm, encouraging 3-sentence assessment that: 1) validates her current state, 2) identifies her top strength, 3) gives one gentle next step. Do not use clinical language. Sound like a wise, caring friend.`;

return generateText(prompt, { maxTokens: 200, temperature: 0.8 });
}
Expand Down Expand Up @@ -135,7 +135,7 @@ function getMockResponse(prompt: string): string {
const lower = prompt.toLowerCase();

if (lower.includes("assess") || lower.includes("life state")) {
return "You are doing so much more than you realise. The fact that you're here, seeking support and growth, already shows tremendous strength. Your journey of becoming again starts with this exact moment of courage — and Her. is with you every step of the way.";
return "You are doing so much more than you realise. The fact that you're here, seeking support and growth, already shows tremendous strength. Your journey of becoming again starts with this exact moment of courage — and SheCodes.AI is with you every step of the way.";
}

if (lower.includes("resume") || lower.includes("cv") || lower.includes("career")) {
Expand All @@ -150,5 +150,5 @@ function getMockResponse(prompt: string): string {
return "Thank you for sharing that with me. What you're feeling is completely valid. You are not alone in this, and what you're carrying deserves to be acknowledged. Would you like to explore what's underneath this feeling together?";
}

return "Her. AI is ready to help. Once you connect your IBM watsonx API key, you'll receive fully personalised, intelligent responses tailored to your unique journey.";
return "SheCodes.AI is ready to help. Once you connect your IBM watsonx API key, you'll receive fully personalised, intelligent responses tailored to your unique journey.";
}
2 changes: 1 addition & 1 deletion scripts/setup-databases.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env node

/**
* Database Setup Script for Her.comeback.ai
* Database Setup Script for SheCodes.AI
* Initializes all required Cloudant databases
*/

Expand Down