Created
September 29, 2025 15:26
-
-
Save jiggyjo11/8c8e6173fa70aa6362e8711372f79480 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import { z } from "zod"; | |
| // Section 1: Project | |
| export const section1Schema = z.object({ | |
| projectType: z.enum(["agent", "research", "dao", "infra", "other"]), | |
| projectName: z.string().min(2, "Project name must be at least 2 characters"), | |
| oneLiner: z.string().min(10, "One liner must be at least 10 characters"), | |
| leadName: z.string().min(2, "Lead name must be at least 2 characters"), | |
| email: z.string().email("Please provide a valid email address"), | |
| primaryProfileUrl: z.string().url("Please provide a valid URL"), | |
| pitchDeckPath: z.string().optional(), | |
| }); | |
| // Section 2: Thesis & Problem-Fit | |
| export const section2Schema = z.object({ | |
| problem: z.string().min(50, "Please provide a detailed problem description"), | |
| solutionEdge: z.string().min(50, "Please describe your solution and competitive edge"), | |
| frontier: z.string().min(30, "Please describe the frontier you're pushing"), | |
| vision10y: z.string().min(30, "Please describe your 10-year vision"), | |
| }); | |
| // Section 3: Team & Execution | |
| export const section3Schema = z.object({ | |
| coreTeam: z.array(z.object({ | |
| name: z.string().min(2, "Name is required"), | |
| role: z.string().min(2, "Role is required"), | |
| profileUrl: z.string().url().optional().or(z.literal("")), | |
| })).min(1, "At least one team member is required"), | |
| cohesion: z.string().min(30, "Please describe team cohesion"), | |
| proofAgency: z.string().min(30, "Please provide proof of agency"), | |
| proofVelocityLink: z.string().url("Please provide a valid URL").optional().or(z.literal("")), | |
| traction: z.string().min(20, "Please describe your traction"), | |
| }); | |
| // Section 4: Economics & Moat | |
| export const section4Schema = z.object({ | |
| tam: z.string().min(5, "Please provide TAM information"), | |
| moat: z.string().min(30, "Please describe your moat"), | |
| valueAccrual: z.string().min(30, "Please describe value accrual"), | |
| fundingStatus: z.string().min(10, "Please provide funding status"), | |
| }); | |
| // Section 5: Web3 / On-Chain | |
| export const section5Schema = z.object({ | |
| onchainIdentity: z.string().min(3, "Please provide ENS or address"), | |
| web3Contribution: z.string().min(30, "Please describe your Web3 contribution"), | |
| launchEta: z.string().min(3, "Please provide launch ETA"), | |
| }); | |
| // Section 6: Supporting Evidence | |
| export const section6Schema = z.object({ | |
| whitepaperPath: z.string().optional(), | |
| financialsPath: z.string().optional(), | |
| otherDocPath: z.string().optional(), | |
| finalWord: z.string().optional(), | |
| }); | |
| // Section 7: Bio App Page | |
| export const section7Schema = z.object({ | |
| category: z.string().min(1, "Please select a category"), | |
| logoPath: z.string().optional(), | |
| headerImagePath: z.string().optional(), | |
| xUrl: z.string().optional().refine((val) => !val || z.string().url().safeParse(val).success, "Please provide a valid URL"), | |
| discordUrl: z.string().optional().refine((val) => !val || z.string().url().safeParse(val).success, "Please provide a valid URL"), | |
| websiteUrl: z.string().optional().refine((val) => !val || z.string().url().safeParse(val).success, "Please provide a valid URL"), | |
| linkedinUrl: z.string().optional().refine((val) => !val || z.string().url().safeParse(val).success, "Please provide a valid URL"), | |
| onePagerPath: z.string().optional(), | |
| marketOverview: z.string().min(50, "Please provide detailed market metrics"), | |
| roadmap: z.string().min(100, "Please provide 4-8 key milestones with format specified"), | |
| recommendReading: z.string().min(20, "Please provide 3-6 foundational reference URLs"), | |
| }); | |
| // Combined draft type | |
| export type Draft = { | |
| section1?: z.infer<typeof section1Schema>; | |
| section2?: z.infer<typeof section2Schema>; | |
| section3?: z.infer<typeof section3Schema>; | |
| section4?: z.infer<typeof section4Schema>; | |
| section5?: z.infer<typeof section5Schema>; | |
| section6?: z.infer<typeof section6Schema>; | |
| section7?: z.infer<typeof section7Schema>; | |
| }; | |
| // Full application schema (for final submission) | |
| export const fullApplicationSchema = z.object({ | |
| section1: section1Schema, | |
| section2: section2Schema, | |
| section3: section3Schema, | |
| section4: section4Schema, | |
| section5: section5Schema, | |
| section6: section6Schema, | |
| section7: section7Schema, | |
| }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment