# Project export: Pluto

This document was generated by HackStack to give an AI agent context about a hackathon project. Sections are labeled with their provenance; content marked as truncated was cut to keep this document small.

## Project metadata

- Hackathon: OpenAI Build Week
- Tagline: Teacher-controlled AI missions that turn community challenges into evidence-backed student learning.
- Devpost: https://devpost.com/software/pluto-b8o6r2
- GitHub: https://github.com/koushiknoah77/pluto
- Video: https://www.youtube.com/embed/sRFAZNFUMks?enablejsapi=1&hl=en_US&rel=0&start=&version=3&wmode=transparent
- Team: 1 GitHub contributor(s) — Koushik Ghosh (8 commits)

## Devpost submission (written by the team)

### Overview

Real problems. Guided learning. Proof that lasts. Pluto is a teacher-controlled learning workspace that connects schools with local community organisations. A partner brings a real challenge. Pluto shapes it into a safe learning mission. A teacher reviews the scope and safeguards, proposes balanced student teams, and controls every release. Students research, collaborate, create useful work, and document their contribution. The partner validates the outcome. Pluto brings the mission, evidence, assessment, consent, and community response together in a shareable Pluto Proof record. Why Pluto Schools want learning to feel useful beyond the classroom. Community organisations have meaningful local problems but rarely have a safe, structured way to work with students. Existing AI tools can generate content quickly, but they do not automatically understand school policy, student identity, evidence quality, or who should be allowed to make a decision. Pluto is built around a different contract: AI helps structure complex work, but it does not silently decide what is true, who is assigned, or how a student is graded. Teachers remain responsible for mission approval, student access, assessment, and publication. Students see clear next steps, grounded sources, and an honest explanation of what the coach can and cannot do. Partners validate usefulness, never individual student grades. How it works A partner submits a local challenge by text or voice note. Pluto drafts a mission with curriculum links, roles, milestones, deliverables, sources, a rubric, and safeguards. A teacher reviews and approves the mission before students can access it. The teacher imports the roster and reviews editable, balanced team proposals. Students work through checkpoints, research sources, attach evidence, collaborate, and reflect. The teacher assesses individual contribution. The partner validates whether the result is useful. Pluto creates a consent-aware Pluto Proof snapshot. Honest AI Pluto clearly labels every AI state: Live AI uses the configured OpenAI model. Template mode uses deterministic local structures when live generation is unavailable. Restricted policy is enforced server-side and limits the coach to safety and reflection prompts. The coach receives approved evidence only. It cites that evidence when possible and says when the available material is insufficient. AI mode, policy, model, and evidence provenance are recorded in the audit path. The assignment engine Pluto does not make a black-box student assignment. It proposes balanced, editable teams using: interests and strengths preferred roles availability and availability windows accessibility needs and accommodations team size and role coverage distribution of strong role matches The teacher approves the final assignment, with approval history and undo. What is implemented Partner challenge intake and delivery validation Teacher mission review and safety gate Roster import and assignment proposals Student mission, workspace, research, artefacts, reflection, and submission flows Source checks, evidence linking, consent, publication controls, and audit history Per-student assessment and gradebook export Pluto Proof verification record Responsive product design for partners, teachers, students, and administrators Template, Live AI, and Restricted policy states Built with Next.js, React, TypeScript, OpenAI, Codex, SQLite, Zod, Vercel, and GitHub Actions. How Codex and GPT-5.6 were used Codex was used throughout the build to consolidate duplicated interface layers, implement the teacher approval and assignment workflows, enforce AI-policy boundaries, connect approved evidence to coaching, fix deployment issues, refine the design system, and run typecheck, lint, tests, and production builds. GPT-5.6 powers the live mission-generation and coaching path when configured. The product remains usable in Template mode when a live model is unavailable, and Restricted mode prevents the server from returning live coaching where school policy does not allow it. Try the pilot The public repository includes a seeded Kochi waste-separation mission so judges can explore every role without real school data. Pilot password for every account: pluto-demo Partner: partner@pluto.local Teacher: teacher@pluto.local Student: student@pluto.local School admin: admin@pluto.local Production boundary This is an open pilot foundation, not an approved production system for real student data. Before school-wide deployment, Pluto still needs managed identity, managed relational and object storage, retention and deletion controls, malware scanning, monitoring, accessibility validation, localisation, LMS/SIS integrations, and operational support. OpenAI Build Week Pluto is submitted to the Education category. The project demonstrates a working product, a coherent design system, a specific education problem, accountable AI, and a non-trivial implementation with server-side authorization, migrations, evidence handling, and assignment constraints.

## README (from the GitHub repository)

# Pluto

<div align="center">

### Real problems. Guided learning. Proof that lasts.

<sub>Teacher-controlled AI for community-connected learning</sub>

`EDUCATION` &nbsp; `AI WITH GUARDRAILS` &nbsp; `NEXT.JS` &nbsp; `OPEN SOURCE PILOT`

</div>

---

Pluto is a teacher-controlled learning workspace that connects schools with local community organisations.

A partner brings a real challenge. Pluto shapes it into a safe learning mission. A teacher reviews the scope and safeguards, proposes balanced student teams, and controls every release. Students research, collaborate, create useful work, and document their contribution. The partner validates the outcome. Pluto brings the mission, evidence, assessment, consent, and community response together in a shareable **Pluto Proof** record.

> **Project status** — Pluto is an open pilot foundation for demos, judging, and continued development. It is not approved for real student data or school-wide production use.

<p align="center">
  <strong>Community challenge</strong>
  &nbsp;→&nbsp;
  <strong>Teacher-approved mission</strong>
  &nbsp;→&nbsp;
  <strong>Evidence-backed student work</strong>
  &nbsp;→&nbsp;
  <strong>Pluto Proof</strong>
</p>

## Contents

| | | |
| --- | --- | --- |
| [Why Pluto](#why-pluto-exists) | [Product flow](#the-product-flow) | [AI contract](#honest-ai-by-design) |
| [Assignment engine](#assignment-engine) | [Architecture](#technical-architecture) | [Run locally](#run-pluto-locally) |
| [Build Week](#openai-build-week) | [Production boundary](#production-boundary) | [Contributing](#contributing-and-security) |

## Why Pluto exists

Schools want learning to feel useful beyond the classroom. Community organisations have meaningful local problems but rarely have a safe, structured way to work with students. Existing AI tools can generate content quickly, but they do not automatically understand school policy, student identity, evidence quality, or who should be allowed to make a decision.

Pluto is built around a different contract:

- AI can help structure complex work, but it does not silently decide what is true, who is assigned, or how a student is graded.
- Teachers remain responsible for mission approval, student access, assessment, and publication.
- Students see clear next steps, grounded sources, and an honest explanation of what the coach can and cannot do.
- Partners validate usefulness, never individual student grades.

> [!IMPORTANT]
> Pluto is not an AI chatbot placed in front of a classroom. It is a supervised workflow where every important decision has a person, a policy, and an evidence trail.

## The product flow

```mermaid
flowchart LR
    A["Partner shares a local need"] --> B["Pluto drafts a safe mission"]
    B --> C["Teacher reviews and approves"]
    C --> D["Roster import + team proposal"]
    D --> E["Teacher approves assignments"]
    E --> F["Students create and link evidence"]
    F --> G["Teacher assesses contribution"]
    G --> H["Partner validates usefulness"]
    H --> I["Pluto Proof snapshot"]

    classDef human fill:#baf36d,stroke:#64864e,color:#171b18;
    classDef system fill:#ece9ff,stroke:#7770b8,color:#171b18;
    classDef proof fill:#1a211a,stroke:#baf36d,color:#ffffff;
    class A,C,E,G,H human;
    class B,D,F system;
    class I proof;
```

| Stage | Owner | Decision |
| --- | --- | --- |
| Challenge | Community partner | What local problem is worth solving? |
| Mission | Pluto + teacher | Is the work safe, useful, and teachable? |
| Assignment | Teacher | Which students and roles are appropriate? |
| Evidence | Student + teacher | What supports the claim and contribution? |
| Outcome | Partner | Was the result useful to the community? |

## What is implemented

### Partner workspace

- Challenge intake by text or voice note
- Locality, audience, grade, subject, language, and outcome context
- Mission progress and delivery review
- Partner validation without access to private student assessment

### Teacher workspace

- Mission review with curriculum links, safety controls, sources, milestones, deliverables, and rubric
- Server-gated mission approval before student access
- Roster import with interests, strengths, availability, role preferences, and accommodations
- Balanced, editable team proposals with approval history and undo
- Team monitoring, check-ins, assessment, consent, and publication controls

### Student workspace

- Mission context, role, checkpoint, and next action
- Team workspace, research log, evidence links, artefacts, and comments
- Individual reflection and contribution evidence
- Source-aware coaching with approved evidence only
- Final submission and Proof preview

### School administration

- School-scoped programme overview
- AI policy and Restricted mode controls
- Consent and safeguarding records
- Partner directory and verification
- Impact analytics and gradebook export

## Honest AI by design

Pluto makes the AI state visible instead of presenting every response as if it came from a live model.

| State | Behaviour |
| --- | --- |
| **Live AI** | Uses the configured OpenAI model for mission drafting, bounded coaching, or transcription. |
| **Template mode** | Uses deterministic local structures when no API key is configured or a live response is unavailable. |
| **Restricted policy** | Enforced server-side. The coach is limited to safety and reflection prompts, even if a client requests live generation. |

The coach receives teacher-approved evidence only. When possible, it returns citations to that evidence; when the material is insufficient, it says so. AI mode, policy, model, and evidence provenance are recorded in the audit path.

```mermaid
flowchart TD
    R["AI request"] --> P{"School policy"}
    P -->|"Restricted"| S["Safety and reflection prompts only"]
    P -->|"Teacher reviewed"| K{"OpenAI key available?"}
    K -->|"Yes"| L["Live AI + model provenance"]
    K -->|"No"| T["Template mode + honest label"]
    L --> E["Approved evidence context"]
    T --> E
    S --> O["Bounded coach response"]
    E --> O

    classDef decision fill:#fff6df,stroke:#9a6c24,color:#171b18;
    classDef safe fill:#e8f6ec,stroke:#3a8b62,color:#171b18;
    classDef ai fill:#ece9ff,stroke:#7770b8,color:#171b18;
    class P,K decision;
    class S,O safe;
    class L,T,E ai;
```

## Assignment engine

Pluto does not make a black-box student assignment. It creates a proposal that a teacher can inspect and edit.

The proposal considers:

- interests and strengths
- preferred mission roles
- availability and availability windows
- accessibility needs and accommodations
- team size and role coverage
- distribution of strong role matches across teams

The teacher approves the final assignment, and the approval becomes part of the workflow history.

## Pluto Proof

Pluto Proof is a shareable mission record that connects:

- the original community challenge
- the teacher-approved mission
- student contribution and evidence
- source and citation context
- individual assessment and reflection
- consent and publication state
- partner validation

The current pilot creates an immutable-style snapshot for verification. A production release will add stronger cryptographic signing, managed storage, and retention controls.

## Technical architecture

| Layer | Implementation |
| --- | --- |
| Application | Next.js App Router, React, TypeScript |
| UI system | One responsive Pluto design system in `app/pluto-system.css` |
| Validation | Zod contracts at API boundaries |
| AI | OpenAI integration with explicit Live, Template, and Restricted states |
| Storage | Migration-backed relational SQLite pilot store |
| Authorization | Server-side session checks and school/resource-level access rules |
| Evidence | Approved source links, citations, consent, publication state, and audit records |
| Verification | Typecheck, ESLint, Node tests, and production build in GitHub Actions |

### Core boundaries

```mermaid
flowchart TB
    UI["Responsiv

[README truncated for size]

## Detected evidence (automated analysis)

Indexed codebase: 80 recognized source files, 576 KB.
- CSS (language) — detected in the code
- Next.js (technology) — detected in the code
- OpenAI (technology) — detected in the code
- React (technology) — detected in the code
- SQL (language) — detected in the code
- TypeScript (language) — detected in the code
- Vercel (technology) — claimed on Devpost, not found in the code

## Codebase structure (from repository index)

### Files (87 of 87)

```
.env.example
.github/pull_request_template.md
.github/workflows/ci.yml
.gitignore
.npmrc
app/access/page.tsx
app/api/challenges/transcribe/route.ts
app/api/challenges/voice-notes/[id]/route.ts
app/api/challenges/voice-notes/route.ts
app/api/coach/route.ts
app/api/health/route.ts
app/api/mentor/route.ts
app/api/missions/generate/route.ts
app/api/platform/assessment/route.ts
app/api/platform/assessment/students/route.ts
app/api/platform/assignments/route.ts
app/api/platform/audits/route.ts
app/api/platform/backups/route.ts
app/api/platform/comments/route.ts
app/api/platform/consents/route.ts
app/api/platform/exports/grades/route.ts
app/api/platform/files/[id]/route.ts
app/api/platform/files/route.ts
app/api/platform/integrations/route.ts
app/api/platform/notifications/route.ts
app/api/platform/program/route.ts
app/api/platform/proof/verify/[id]/route.ts
app/api/platform/research/check/route.ts
app/api/platform/roster/route.ts
app/api/platform/session/route.ts
app/dashboard/page.tsx
app/layout.tsx
app/onboarding/build-type/page.tsx
app/onboarding/experience/page.tsx
app/onboarding/language/page.tsx
app/onboarding/learning-style/page.tsx
app/page.tsx
app/pluto-system.css
app/projects/idea/page.tsx
app/projects/new/page.tsx
app/projects/page.tsx
app/projects/plan/page.tsx
app/proof/[id]/page.tsx
app/workspace/page.tsx
components/assignment-workspace.tsx
components/pluto-app.tsx
components/pluto-complete.tsx
components/pluto-realm.tsx
CONTRIBUTING.md
db/migrations/001_relational_foundation.sql
docs/00-product-brief.md
docs/01-ux-ui-spec.md
docs/02-frontend-architecture.md
docs/03-backend-ai-architecture.md
docs/04-data-and-api-contracts.md
docs/05-delivery-plan.md
docs/06-quality-and-security.md
docs/07-demo-and-launch.md
docs/08-product-revamp-plan.md
docs/README.md
eslint.config.mjs
features/curriculum/habit-tracker.ts
features/curriculum/project-path.ts
features/curriculum/validators.ts
features/mentor/fallback.ts
features/mentor/schema.ts
features/missions/demo.ts
features/missions/mission-store.ts
features/missions/schema.ts
features/platform/assignment-engine.ts
features/platform/contracts.ts
features/platform/relational-store.ts
features/platform/resource-auth.ts
features/platform/server-auth.ts
features/platform/server-store.ts
features/program/state.ts
features/projects/project-brief.ts
LICENSE
next-env.d.ts
next.config.ts
package.json
pnpm-workspace.yaml
README.md
SECURITY.md
TASKS.md
tests/relational-migration.test.mjs
tsconfig.json
```

### Dependencies

- package.json: @codesandbox/sandpack-react@latest, @types/node@latest, @types/react@latest, @types/react-dom@latest, eslint@^9.0.0, eslint-config-next@latest, lucide-react@latest, next@latest, openai@latest, react@latest, react-dom@latest, typescript@^5.9.3, zod@latest

### Recent commits (newest first)

- Add diagrams and visual structure to README
- Rewrite README for production and hackathon readiness
- Redesign Pluto product experience
- Make Vercel pilot workspace resilient
- Fix Vercel session guidance and hero backdrop
- Polish shared UI and hero experience
- Fix CI dependency build approvals
- Initial public release of Pluto

## Key source files (fetched from GitHub, selected and truncated for size)

### SECURITY.md

```markdown
# Security policy

## Supported scope

Pluto is currently a local pilot foundation. It is not approved for real school deployment or real student data. Contributions should preserve that boundary until managed identity, production data controls, retention/deletion policies, monitoring, and security review are in place.

## Reporting a vulnerability

Please do not open a public issue for a vulnerability, exposed credential, student-data concern, authorisation bypass, file-upload issue, or AI-policy bypass. Use GitHub's private security advisory flow for this repository, or contact the repository owner through the private channel listed on the repository profile.

Include a concise reproduction path, the affected route or component, impact, and any suggested mitigation. Do not include secrets or personal data.

## Immediate safeguards

- Keep OPENAI_API_KEY and PLUTO_SESSION_SECRET in .env.local only.
- Keep .pluto-pilot and smoke-test data out of version control.
- Do not publish pilot account credentials, uploaded files, voice notes, consent records, or Proof exports.
- Treat server-side authorisation and Restricted policy checks as security-sensitive code.

```

### CONTRIBUTING.md

```markdown
# Contributing to Pluto

Thanks for helping make real-world learning safer and more useful.

## Before you begin

1. Use Node 22.5 or later and pnpm 11.7 or later.
2. Copy .env.example to .env.local only when you need optional live AI features.
3. Never commit API keys, local pilot data, learner information, recordings, or exported Proof records.
4. Treat all seeded accounts and mission data as demonstration material, not real identities.

## Local workflow

1. Install dependencies with pnpm install.
2. Run pnpm dev and open http://127.0.0.1:3000.
3. Make focused changes that preserve the product boundaries: teachers approve missions and assessment; partners never receive individual grades; AI mode and provenance remain visible.
4. Before opening a pull request, run:

   pnpm typecheck
   pnpm lint
   pnpm test
   pnpm build

## Pull requests

- Explain the user problem and the role affected: partner, teacher, student, or school administrator.
- Keep a change small enough to review.
- Include screenshots or a short screen recording for visual changes.
- Add or update tests when changing server behaviour, contracts, assignment constraints, policy enforcement, or data migration.
- Update the documentation when the product flow, API surface, AI policy, data boundary, or deployment path changes.

## Product guardrails

- Do not make a template response look like live AI.
- Enforce Restricted AI policy on the server, not only in the interface.
- Pass only approved evidence to coaching features.
- Keep teacher approval before student publication, assessment, partner delivery, and public Proof.
- Do not add real student data to issues, pull requests, fixtures, screenshots, or demos.

```

### package.json

```
{
  "name": "pluto-learning-workspace",
  "version": "0.1.0",
  "private": true,
  "packageManager": "pnpm@11.7.0",
  "engines": {
    "node": ">=22.5.0",
    "pnpm": ">=11.7.0"
  },
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "eslint .",
    "typecheck": "tsc --noEmit",
    "test": "node --test tests/*.test.mjs"
  },
  "dependencies": {
    "@codesandbox/sandpack-react": "latest",
    "lucide-react": "latest",
    "next": "latest",
    "openai": "latest",
    "react": "latest",
    "react-dom": "latest",
    "zod": "latest"
  },
  "devDependencies": {
    "@types/node": "latest",
    "@types/react": "latest",
    "@types/react-dom": "latest",
    "eslint": "^9.0.0",
    "eslint-config-next": "latest",
    "typescript": "^5.9.3"
  }
}

```

### app/page.tsx

```typescript
import { PlutoApp } from "@/components/pluto-app";

export default function Home() {
  return <PlutoApp initialScreen="landing" />;
}

```

### app/layout.tsx

```typescript
import type { Metadata } from "next";
import "./pluto-system.css";

export const metadata: Metadata = {
  title: "Pluto | Turn local problems into real learning",
  description: "A teacher-approved platform that turns community challenges into safe, real-world learning missions for student teams."
};

export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
  return (
    <html lang="en">
      <head>
        <link rel="preconnect" href="https://fonts.googleapis.com" />
        <link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />
        {/* eslint-disable-next-line @next/next/no-page-custom-font */}
        <link href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Space+Grotesk:wght@400;500;600;700&display=swap" rel="stylesheet" />
      </head>
      <body>{children}</body>
    </html>
  );
}

```

### app/workspace/page.tsx

```typescript
import { redirect } from "next/navigation";

export default function WorkspacePage() {
  redirect("/dashboard");
}

```

### app/projects/page.tsx

```typescript
import { redirect } from "next/navigation";

export default function GuidedProjectsPage() {
  redirect("/dashboard");
}

```

### app/access/page.tsx

```typescript
import { PlutoApp } from "@/components/pluto-app";

export default function AccessPage() {
  return <PlutoApp initialScreen="access" />;
}

```

### app/dashboard/page.tsx

```typescript
import { PlutoApp } from "@/components/pluto-app";

export default function DashboardPage() {
  return <PlutoApp initialScreen="dashboard" />;
}

```

### app/onboarding/language/page.tsx

```typescript
import { redirect } from "next/navigation";

export default function LanguagePage() {
  redirect("/access");
}

```

[66 more indexed source files omitted to keep this export small. The full file list is in the Codebase structure section above.]