Skip to content
PracticalSwanPublic

About

Evidence-first AI university research and application guidance

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

39 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UniProof

UniProof is an evidence-first AI platform for international students researching universities, comparing supported options, and turning published application requirements into an actionable plan.

The project was developed for the Pixel Forge AI Hackathon 2026. Its core product rule is simple: important claims should remain traceable to evidence, and missing, stale, conflicting, or incomparable information should stay explicit instead of being guessed.

Project status (2026-09-23): The Vercel project was removed and https://uniproof-beta.vercel.app returns 404. No UniProof project was present in the connected Supabase account. Project-local credentials and generated caches were removed; .codegraph/ is intentionally retained. GitHub CI for closure commit 9b9ab42 passed application tests, type checks, lint, build, and local Supabase gates, but failed the production dependency audit for the locked Next.js and Sharp versions. The source repository remains available, and its owner will archive GitHub separately. See docs/operations/project-closure.md for the full status and boundaries.

Product modes

Mode Purpose Status
Research Build structured university/program dossiers with source-level evidence, freshness, conflicts, unknowns, and partial-result handling Implemented and browser-verified during development
Compare Compare 2–4 compatible supported targets with deterministic user-priority fit, coverage, gaps, and exact evidence references Implemented and browser-verified during development
Guide Compare one applicant profile with one supported program's published requirements and derive risks, checklist items, deadlines, and official next steps Implemented and browser-verified during development

Detailed roadmap: docs/planning/tasks.md

Phase 5 architecture: docs/planning/phase-5-guide-mode.md

Why UniProof

University research is difficult because information is spread across official program pages, admissions pages, scholarship pages, government sources, datasets, rankings, and community material. UniProof is designed to preserve provenance rather than flatten those sources into one unsupported answer.

The current evidence model distinguishes verified, corroborated, university-reported, conflicting, anecdotal, inferred, outdated, unknown, and operationally incomplete information. Comparison and Guide add deterministic application-owned gates on top of that evidence instead of asking an AI model to invent a score or admission probability.

Architecture as implemented

Supported catalog
      |
      v
POST /api/research
      |
      +--> Tavily -> Brave -> direct/structured degraded discovery
      +--> bounded DNS-pinned public retrieval
      +--> structured AI extraction/reconciliation
           former hosted release: Groq -> OpenRouter
           Gemini adapter retained/tested; it was not configured in the former hosted release
      |
      v
validated ResearchDossier
      |
      +--> Research UI + exact evidence inspection
      |
      +--> deterministic Compare registry/scoring/trade-offs
      |
      +--> deterministic Guide profile assessment/checklist/timeline
      |
      +--> optional signed-in private snapshot save/restore through Supabase RLS

Important boundaries:

  • provider credentials stay server-side;
  • retrieved pages and model output are untrusted input;
  • arbitrary general-web sources remain inferred and cannot manufacture corroborated status; corroboration is reserved for application-owned reliable source classes with distinct owners and origins;
  • the browser validates the public Research response again before display;
  • Comparison and Guide working state remain memory-first and never become provider/model inputs;
  • Guide applicant profile values are not sent through the Research/provider chain; optional private persistence is explicit, signed-in, user-scoped, and RLS-protected;
  • saved profile/Research/Comparison/Guide results are historical snapshots restored through one account-bound memory-only handoff, never URL/Web Storage state;
  • saved Comparison/Guide derivations are recomputed with the version-1 deterministic algorithms on write/read, and restored private state is cleared when its account signs out or changes;
  • conflicting/missing/incompatible evidence fails closed rather than becoming a guessed fact or zero score;
  • production browser policy uses nonce-based CSP and restrictive security headers without third-party runtime analytics/scripts.

See docs/design.md, docs/security.md, and docs/security-threat-model.md for the retained architecture and threat model.

Supported catalog

The checked-in MVP catalog contains 30 universities and 45 computing programs across 11 country codes (BE, CA, DE, DK, FI, GB, IT, NL, SE, TH, US). Research and downstream modes operate on supported catalog identity rather than arbitrary user-supplied university URLs. Coverage is deliberately bounded; UniProof does not claim global university coverage.

Country University Supported program(s)
BE KU Leuven Master of Artificial Intelligence
CA McGill University B.Sc. Major in Computer Science; M.Sc. Computer Science (Non-Thesis)
CA University of Alberta Master of Science (Course-Based) in Computing Science, Multimedia
CA University of British Columbia Computer Science Major (BSc); MSc Computer Science
CA University of Toronto Computer Science Admission Category (St. George); Applied Computing MScAC — Artificial Intelligence Concentration
CA University of Waterloo Bachelor of Computer Science; Master of Mathematics (Computer Science)
DE RWTH Aachen University Data Science M.Sc.; Human-Centered Intelligent Systems M.Sc.
DE Technical University of Munich Informatics M.Sc.
DK Technical University of Denmark Master of Science in Engineering (Computer Science and Engineering)
FI Aalto University Machine Learning, Data Science and Artificial Intelligence, Master of Science (Technology)
GB Imperial College London Computing BEng
GB The University of Edinburgh Artificial Intelligence BSc (Hons); Artificial Intelligence MSc
GB University College London Computer Science BSc
IT Politecnico di Milano Computer Science and Engineering
NL Delft University of Technology MSc Computer Science
NL University of Amsterdam MSc Artificial Intelligence
SE KTH Royal Institute of Technology MSc Computer Science
TH Chulalongkorn University Bachelor of Engineering: Computer Engineering (CP); Master of Science Program in Computer Science and Information Technology
TH King Mongkut's University of Technology Thonburi Bachelor of Science in Computer Science (English Program); Master of Science in Computer Science
TH Mahidol University Master of Science in Computer Science
US Carnegie Mellon University Bachelor of Science in Artificial Intelligence; Bachelor of Science in Computer Science
US Cornell University Computer Science, B.S. (Engineering); Computer Science, M.Eng.
US Georgia Institute of Technology Bachelor of Science in Computer Science
US Massachusetts Institute of Technology Bachelor of Science in Artificial Intelligence and Decision Making (Course 6-4); Bachelor of Science in Computer Science and Engineering (Course 6-3)
US Stanford University Computer Science Bachelor's Program
US University of California, Berkeley Computer Science
US University of California San Diego B.S. Artificial Intelligence; B.S. Computer Science; M.S. Computer Science
US University of Illinois Urbana-Champaign B.S. in Computer Science; Master of Computer Science in Urbana-Champaign
US University of Michigan–Ann Arbor Computer Science Major (Engineering); Master's in Computer Science and Engineering
US University of Washington, Seattle B.S. Computer Science (Seattle)

lib/research/catalog/data.ts is the canonical catalog source; this table should be updated with it whenever catalog coverage changes.

Tech stack

  • Next.js 16.3.1 + React 19.2.8 + TypeScript
  • Tailwind CSS + shadcn/ui/Radix primitives
  • Zod runtime validation
  • Supabase SSR/Auth + PostgreSQL/RLS for optional private saved snapshots
  • Tavily primary discovery with Brave Search fallback
  • ROR and approved structured/public sources
  • Provider-neutral structured AI adapters for Gemini, Groq, and OpenRouter; the hosted hackathon release uses Groq -> OpenRouter and intentionally leaves Gemini unconfigured because current Gemini API terms are incompatible with an API client likely to be accessed by under-18 applicants
  • Vitest unit/integration testing
  • Playwright browser/E2E testing

Local development

Prerequisites

  • Node.js 22.x (the package/lockfile release contract is pinned to Node 22)
  • npm 10.9.3 or compatible npm from the declared package manager

Install

npm ci

Start the development server

npm run dev

Then open the local URL printed by Next.js.

Provider configuration

Automated unit/browser tests are designed to remain deterministic and offline. Live Research requires provider credentials.

Run:

npm run setup:providers

The repository-owned setup flow manages the supported environment-key names without committing or echoing secrets. Keep .env.local private and untracked.

Optional local Auth and Saved snapshots

Phase 6A supports local Supabase passwordless email Auth and private saved snapshots without making accounts mandatory. With the Supabase CLI installed:

supabase start
supabase db reset
supabase test db

Configure only the local public browser values NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY from the local Supabase stack in your ignored local environment, then start Next.js normally. Local Magic Links are delivered to the Supabase Mailpit development inbox and must be opened in the same browser that requested them; a short-lived intent cookie rejects cross-browser account swapping. Do not put a service-role key in browser variables or ordinary saved-artifact routes. The former public hackathon deployment left hosted Supabase browser/Auth variables absent because production email delivery had not been configured; anonymous Research/Compare/Guide was the judge-facing release.

Verification commands

npm test -- --run
npx tsc --noEmit
npm run lint
npm run build
npm run test:e2e
npm audit --omit=dev

The full project workflow contains additional built-browser, race-repeat, encoding, secret-boundary, and workspace-integrity checks documented in the phase plans.

Repository structure

app/                 Next.js routes and page shells
components/          Research, Compare, shared evidence, layout, and UI components
lib/research/        Catalog, discovery, retrieval, extraction, reconciliation, Research API/client contracts
lib/comparison/      Deterministic Comparison contracts, metric registry, scoring, trade-offs, client state
lib/guide/           Deterministic Guide contracts, assessment, planning, registry, client state
lib/auth/            Server-derived session assurance and sanitized Auth contracts
lib/persistence/     Versioned saved-artifact schemas, bounded bodies, private API/client logic
supabase/             Local config, migration, Mailpit template, seed policy, pgTAP database tests
docs/planning/       Canonical implementation architecture/specifications
docs/superpowers/    Detailed task-by-task execution runbooks
tests/               Vitest suites and deterministic fixtures
tests/e2e/           Playwright browser acceptance
scripts/             Provider setup and workspace verification

Phase 5 Guide is implemented under lib/guide/ and components/guide/. Phase 6A layers optional Auth/Saved behavior around the existing Research/Compare/Guide semantics without introducing provider-aware applicant processing.

Documentation

AGENTS.md, AGENT_MEMORY.md, and LESSONS.md define the repository's AI-development workflow and accumulated project constraints. Contributors using coding agents should read those files before modifying the project.

Security and privacy

Do not commit API keys, database credentials, .env files, private applicant data, or sensitive documents. Do not put suspected credentials, private data, or exploitable details in a public GitHub issue.

Research sends only public research context through the configured search/AI providers. Guide sends only the supported program plus optional intake/year through the existing Research boundary. Applicant academic/financial profile values stay browser-local unless the signed-in user explicitly chooses Save profile, in which case the validated profile is stored only in that user's RLS-protected Supabase rows and is still excluded from Research/provider traffic.

See SECURITY.md before reporting a vulnerability or changing a trust boundary.

Contributing

The project is closed and contributions are not actively solicited. CONTRIBUTING.md remains as reference guidance if the owner reactivates the project.

Never use a real person's academic/private information in fixtures, bug reports, screenshots, or traces.

Historical hosted release (last verified 2026-08-23; removed 2026-09-23)

The following release, deployment, security, and test details describe the former hosted service. They are historical evidence, not current availability or operating instructions. The Vercel project and alias were removed on 2026-09-23; see docs/operations/project-closure.md.

The anonymous Phase 0-6C application was previously live at https://uniproof-beta.vercel.app. The earlier executable revision was Git SHA f797e0a692f113a29b3f4aa3491a216ead292b2a; GitHub Actions run 32545347640 succeeded on that exact SHA, and Vercel Production deployment dpl_8pYdBJEyvcohHuMm2e2cXt7cAYm7 served the canonical alias. The expensive public Research route was protected by one Vercel WAF rule scoped exactly to POST /api/research, fixed-window 20 requests / 60 seconds / source IP, returning 429 on excess. Production browser policy used request nonces, connect-src 'self', private/no-store caching, and Vercel-delivered HSTS. Hosted discovery was Tavily -> Brave; hosted structured AI was Groq -> OpenRouter. Gemini and hosted Supabase Auth/save were intentionally absent from the public environment for the release reasons documented above.

The 2026-08-22 reliability pass removed request amplification without raising global time or attempt budgets: long provider Retry-After windows now fail over instead of being clamped into immediate retries, persistent provider unavailability is remembered for the remainder of one Research run, discovery uses the same bounded persistent-failure circuit, broad documents are routed/scheduled by category intent, and Compare defaults request only categories that can affect positive default weights. Source-gap claims remain visible in Research but are non-definitive in Compare and Guide.

The historical Phase 6C smoke budget remains 3/3 accepted live Research executions. The separate final-testing allowance used 1/5 accepted execution: Edinburgh Artificial Intelligence MSc, Research only, returned HTTP 200 in about 18.6 seconds with one source, zero claims, and a sanitized provider-error source gap. This is not claimed as successful evidence production; it verifies that the formerly ~161-second live failure path now terminates quickly and fail-closed under current provider pressure. One preceding malformed public request returned HTTP 400 before Research execution and is not counted. Accounting is therefore 3 historical + 1 final-testing = 4 accepted executions total.

The verified executable tree passed 625/625 Vitest tests, TypeScript, ESLint, production build, release/workspace verification, and npm audit --omit=dev with zero vulnerabilities. Browser verification passed Compare 63/63, Guide 55/55, Research 70/70, and local Supabase Auth/Saved 12/12. Production mobile/desktop route smoke loaded all four core routes in 8/8 checks with zero console/page errors; the deployed /research bundle remained same-origin and free of configured-secret matches/provider-key markers/source-map markers. Release screenshots under docs/assets/screenshots/phase-6/ remain deterministic presentation evidence, not live-provider outputs.

At the last documented Devpost check (2026-08-21), the draft was deliberately not submitted because the final video was pending. The current entry/submission state is unverified; archived draft text and recording guidance remain under docs/submission/.

License

This project is licensed under the terms in LICENSE.

About

Evidence-first AI university research and application guidance

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages