Project Info
Inspiration
When I read textbooks, I always get confused by parts where they use too many complicated words, so I made a program that helps any student understand the textbook of their choice.
What it does
It simplifies the textbook into words that the user can better understand, the choices being: 5th-grade tone, Gen Z slang terms, and bullet points.
How we built it
I built it by using Codex to help create the code.
Challenges we ran into
I got a working app, but then I realized that the app just took text and didn't change it, just returned it as it was given.
Accomplishments we're proud of
I'm proud of being able to create my first-ever app.
What we learned
I learned how to utilize GitHub and Codex and how it can be used to benefit me in certain situations.
What's next
More tones will be provided, allowing more variation for people to select.
vinext-starter
A clean full-stack starter running on vinext, with optional Cloudflare D1 and Drizzle support.
Prerequisites
- Node.js
>=22.13.0
Quick Start
npm install
npm run dev
npm run build
This starter does not use wrangler.jsonc.
Included Shape
- edit site code under
app/ .openai/hosting.jsondeclares optional Sites D1 and R2 bindingsvite.config.tssimulates declared bindings for local developmentdb/schema.tsstarts intentionally emptyexamples/d1/contains an optional D1 example surfacedrizzle.config.tssupports local migration generation when needed
Workspace Auth Headers
OpenAI workspace sites can read the current user's email from
oai-authenticated-user-email.
SIWC-authenticated workspace sites may also receive
oai-authenticated-user-full-name when the user's SIWC profile has a non-empty
name claim. The full-name value is percent-encoded UTF-8 and is accompanied by
oai-authenticated-user-full-name-encoding: percent-encoded-utf-8.
Treat the full name as optional and fall back to email when it is absent:
import { headers } from "next/headers";
export default async function Home() {
const requestHeaders = await headers();
const email = requestHeaders.get("oai-authenticated-user-email");
const encodedFullName = requestHeaders.get("oai-authenticated-user-full-name");
const fullName =
encodedFullName &&
requestHeaders.get("oai-authenticated-user-full-name-encoding") ===
"percent-encoded-utf-8"
? decodeURIComponent(encodedFullName)
: null;
const displayName = fullName ?? email;
// ...
}
Optional Dispatch-Owned ChatGPT Sign-In
Import the ready-to-use helpers from app/chatgpt-auth.ts when the site needs
optional or required ChatGPT sign-in:
- Use
getChatGPTUser()for optional signed-in UI. - Use
requireChatGPTUser(returnTo)for server-rendered pages that should send anonymous visitors through Sign in with ChatGPT. - Use
chatGPTSignInPath(returnTo)andchatGPTSignOutPath(returnTo)for browser links or actions. - Pass a same-origin relative
returnTopath for the destination after sign-in or sign-out. The helper validates and safely encodes it. - Mark protected pages with
export const dynamic = "force-dynamic"because they depend on per-request identity headers.
Dispatch owns /signin-with-chatgpt, /signout-with-chatgpt, /callback, the
OAuth cookies, and identity header injection. Do not implement app routes for
those reserved paths. Routes that do not import and call the helper remain
anonymous-compatible.
SIWC establishes identity only; it does not prove workspace membership. Use the Sites hosting platform's access policy controls for workspace-wide restrictions, or enforce explicit server-side membership or allowlist checks.
Use SIWC for account pages, user-specific dashboards, saved records, and write actions tied to the current ChatGPT user. Leave public content anonymous.
Useful Commands
npm run dev: start local developmentnpm run build: verify the vinext build outputnpm test: build the starter and verify its rendered loading skeletonnpm run db:generate: generate Drizzle migrations after schema changes
Learn More
Analysis
View
Metric
- 5
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- HTMLIn code
- Next.jsIn code
- ReactIn code
- Tailwind CSSIn code
- TypeScriptIn code
- JavaScriptClaimed
- OpenAIClaimed
6 of 8 appear in the indexed code. 2 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
40 KB
Source files
15
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
giamenon4144/Textify
30 files · 578 KB · @ 828d99b
Structure
Interface
4 files · 13%Screens, components and styles rendered to the user.
API & routing
2 files · 7%Request entry points: routes, handlers and controllers.
Application logic
1 file · 3%Domain rules, services and shared utilities.
Background jobs
1 file · 3%Work run outside a request: tasks, workers and schedules.
Data & schema
4 files · 13%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript65%
- CSS18%
- HTML9%
- Markdown8%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 20- drizzle-orm
- next
- react
- react-dom
- +16 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.