Skip to content
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
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
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
## Mission Focus

- Until the 1% Treaty passes, optimize for the International Campaign to End War and Disease at `warondisease.org`.
- Legal nonprofit: Accelerated Medicine Foundation. Registered DBAs include Institute for Accelerated Medicine and International Campaign to End War and Disease.
- The default product question is: does this help a human vote, recruit two more humans, get an organization to join, register a plaintiff, pressure a leader, or trust the quantified case enough to act?
- Treat `optimitron.com` as the operating system and proof engine behind the campaign: task coordination, referrals, communications, OPG/OBG/Wishocracy, politician grading, impact math, and AI-agent workflows. Do not let the broader platform compete with the campaign for attention during this phase.
- Park generic platform features, clever demos, cosmetic cleanup, and non-campaign variant work unless they directly reduce campaign friction or protect an already-shipping path.
Expand Down
183 changes: 180 additions & 3 deletions packages/data/src/parameters/parameters-calculations-citations.ts

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion packages/db/src/__tests__/seed.integration.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ describeIfDatabase("syncManagedData", () => {
},
{
taskKey: "wishonia-coordinates-eod:2026-q3",
title: "Wishonia coordinates Earth Optimization Dates",
title: "Wishonia coordinates Earth Optimization Missions",
descriptionSnippet: "This task tracks the build + the AI credits that power it.",
},
{
Expand Down
10 changes: 5 additions & 5 deletions packages/db/src/managed-data/managed-dating-catalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,29 +7,29 @@ import {
export const MANAGED_DATING_PROMPTS = [
{
key: "first-mission-date",
text: "A useful first date would be",
text: "A useful first mission would be",
},
{
key: "after-vote",
text: "After we vote to end war and disease, we should",
},
{
key: "awkward-date-upside",
text: "Even if the date is bad, it was worth it if",
text: "Even if the mission is awkward, it was worth it if",
},
] as const;

export const MANAGED_DATING_QUESTIONS = [
{
key: "campaign-dates",
text: "Would you go on a date that also does something useful for the campaign?",
text: "Would you go on a mission that also does something useful for the campaign?",
category: "mission",
answerOptions: ["Yes", "Only if it is normal first", "No"],
allowMultiple: false,
},
{
key: "flyer-comfort",
text: "Which campaign date sounds least embarrassing?",
text: "Which mission sounds least embarrassing?",
category: "mission",
answerOptions: [
"Coffee plus QR flyers",
Expand All @@ -41,7 +41,7 @@ export const MANAGED_DATING_QUESTIONS = [
},
{
key: "war-disease-priority",
text: "How much should a partner care about ending war and disease?",
text: "How much should a mission partner care about ending war and disease?",
category: "values",
answerOptions: [
"A lot",
Expand Down
12 changes: 6 additions & 6 deletions packages/db/src/managed-data/managed-seed-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1627,7 +1627,7 @@ export async function syncManagedTreatyAccountabilityData() {
{
id: "wishonia-coordinates-eod:2026-q3",
taskKey: "wishonia-coordinates-eod:2026-q3",
title: "Wishonia coordinates Earth Optimization Dates",
title: "Wishonia coordinates Earth Optimization Missions",
description:
"Pair humans for one hour. The campaign's Wishonia AI tells each pair what to do in their hour to optimize Earth, ranked by impact-per-minute, using the campaign's parameter catalog + manual. This task tracks the build + the AI credits that power it.",
sortOrder: -650,
Expand Down Expand Up @@ -1656,7 +1656,7 @@ export async function syncManagedTreatyAccountabilityData() {
[
`${organizationName}: the International Campaign to End War and Disease is asking three things in one conversation.`,
"",
'1. **Free API credits** to power Wishonia (our Wishonia personality + manual RAG via your model) for paired Earth Optimization Dates. Bridge until your frontier model is correctly trained to answer "how do humans end war and disease."',
'1. **Free API credits** to power Wishonia (our Wishonia personality + manual RAG via your model) for paired Earth Optimization Missions. Bridge until your frontier model is correctly trained to answer "how do humans end war and disease."',
"",
"2. **Grant funding** for /fix-ai — a mass-feedback infrastructure that helps humans submit thumbs-down + the correct answer to your model's RLHF pipeline whenever your model gives a worse answer to the question above. Goal: train your model to give the correct answer at scale.",
"",
Expand Down Expand Up @@ -1789,19 +1789,19 @@ export async function syncManagedTreatyAccountabilityData() {
parentTaskId: getHumanFacingTaskParentId(
"wishonia-coordinates-eod:2026-q3",
),
title: "Go on an Earth Optimization Date with another human",
title: "Go on an Earth Optimization Mission with another human",
description: [
"Pair with another human. Talk for a few minutes. Decide together what is the most effective way you can spend the next hour to optimize Earth. Then do it.",
"",
"An Earth Optimization Date is, by definition, a non-romantic activity. Print flyers and tape them somewhere with foot traffic. Show each other warondisease.org and vote together. Pick two humans each of you can text the link to.",
"An Earth Optimization Mission is, by definition, a non-romantic activity. Print flyers and tape them somewhere with foot traffic. Show each other warondisease.org and vote together. Pick two humans each of you can text the link to.",
"",
"There are approximately 1.2 humans dying every second. Focused use of one hour matters.",
].join("\n"),
estimatedEffortHours: 1,
sortOrder: -110,
primaryEndpoint: {
label: "Find a partner",
url: "/love",
label: "Start a mission",
url: "/missions",
instructions: "Pair up.",
},
},
Expand Down
1 change: 1 addition & 0 deletions packages/web/e2e/utils/static-pages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ const SMOKE_TEST_SITE = getSiteFromHeaders(
export const AUTH_REQUIRED_PATHS: Set<string> = new Set([
ROUTES.profile,
ROUTES.dashboard,
ROUTES.messages,
ROUTES.census,
ROUTES.checkIn,
ROUTES.organizations,
Expand Down
14 changes: 14 additions & 0 deletions packages/web/e2e/utils/visual-routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,20 @@ const SEEDED_DYNAMIC_ROUTES: VisualRoute[] = [
authenticated: true,
requiredText: /Who should do it\?/,
},
{
name: "people-missions",
path: "/people?missions=1",
required: false,
authenticated: true,
requiredText: /Mission people/,
},
{
name: "people-missions-romantic",
path: "/people?missions=1&intent=DATES",
required: false,
authenticated: true,
requiredText: /Could be romantic/,
},
{
name: "task-optimize-earth",
path: "/tasks/optimize-earth",
Expand Down
11 changes: 11 additions & 0 deletions packages/web/scripts/build-visual-review.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ const authenticatedSnapshotRouteNames = new Set([
"plaintiffs-manage",
"settings",
"side-menu-auth",
"messages",
"people-missions",
"people-missions-romantic",
]);
const markdownDiffCache = new Map();
let imageDiffDependenciesPromise = null;
Expand Down Expand Up @@ -119,9 +122,17 @@ const routeOrder = [
"tasks-index-auth",
"people",
"people-auth",
"people-missions",
"people-missions-romantic",
"people-mike",
"love",
"missions",
"missions-auth",
"messages",
"questions",
"feedback",
"privacy",
"terms",
"settings",
"organizations",
"organization-iam-public",
Expand Down
40 changes: 40 additions & 0 deletions packages/web/src/app/api/dating/blocks/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { DatingBlockScope } from "@optimitron/db";
import { NextResponse } from "next/server";
import { z } from "zod";
import { requireAuth } from "@/lib/auth-utils";
import { createDatingBlock } from "@/lib/dating.server";

export const runtime = "nodejs";

const BlockBodySchema = z.object({
blockedProfileId: z.string().min(1).max(120),
reason: z.string().max(500).nullish(),
scope: z.nativeEnum(DatingBlockScope).optional(),
});

export async function POST(request: Request) {
try {
const { userId } = await requireAuth();
const parsed = BlockBodySchema.parse(await request.json());
const block = await createDatingBlock(userId, parsed);
return NextResponse.json({ block, success: true });
} catch (error) {
if (error instanceof Error && error.message === "Unauthorized") {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
if (error instanceof z.ZodError) {
return NextResponse.json(
{ error: "Invalid dating block." },
{ status: 400 },
);
}
if (error instanceof Error) {
return NextResponse.json({ error: error.message }, { status: 400 });
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
console.error("[dating] Failed to block profile:", error);
return NextResponse.json(
{ error: "Failed to block dating profile." },
{ status: 500 },
);
}
}
3 changes: 2 additions & 1 deletion packages/web/src/app/api/dating/profile/route.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {
DatingProfileStatus,
DatingRelationshipIntent,
} from "@optimitron/db";
} from "@optimitron/db/enums";
import { NextResponse } from "next/server";
import { z } from "zod";
import { requireAuth } from "@/lib/auth-utils";
Expand All @@ -18,6 +18,7 @@ const ProfileBodySchema = z.object({
headline: z.string().max(140).nullish(),
lookingForText: z.string().max(1000).nullish(),
relationshipIntents: z.array(z.nativeEnum(DatingRelationshipIntent)).max(8).optional(),
safetyAcknowledged: z.boolean().optional(),
status: z.nativeEnum(DatingProfileStatus).optional(),
wantsCampaignDates: z.boolean().optional(),
});
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/app/foundations/page.logged-out.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,4 @@
#### UNIT BREAKDOWN
- No unit pledges yet.
- [SIGN IN AS YOUR ORGANIZATION TO PLEDGE](/auth/signin?callbackUrl=%2Ffoundations)
- Want to coordinate with another human? Go on an [Earth Optimization Date](/love).
- Want to coordinate with another human? Go on an [Earth Optimization Mission](/missions).
4 changes: 2 additions & 2 deletions packages/web/src/app/foundations/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -604,9 +604,9 @@ export default async function FoundationsPage() {
Want to coordinate with another human? Go on an{" "}
<Link
className="underline decoration-dotted underline-offset-4"
href={ROUTES.love}
href={ROUTES.missions}
>
Earth Optimization Date
Earth Optimization Mission
</Link>
.
</p>
Expand Down
85 changes: 0 additions & 85 deletions packages/web/src/app/love/dating/discover/page.tsx

This file was deleted.

22 changes: 0 additions & 22 deletions packages/web/src/app/love/dating/matches/page.logged-out.md

This file was deleted.

This file was deleted.

18 changes: 0 additions & 18 deletions packages/web/src/app/love/dating/page.logged-out.md

This file was deleted.

Loading
Loading