Inspiration

After meeting students across Canada, I noticed that many of them shared the same problem: finding a co-op position is extremely difficult.

Some students submit 200 or 300 applications and receive only a few interview opportunities. They may have relevant experience, but it is often buried inside a generic resume that does not clearly show why they fit a particular role.

Students are constantly told to tailor their resume for every application. That advice is correct, but manually reviewing job descriptions, reorganizing resume content, maintaining multiple versions, and tracking hundreds of applications is exhausting.

The obvious solution might be an AI that rewrites a resume automatically. However, unrestricted AI generation creates another problem: it can exaggerate skills or invent experience that the student never had.

That led to the central rule behind InternshipCounsellor:

The system may reorganize and highlight what a student has actually done, but it must never manufacture experience that does not exist.

I built InternshipCounsellor to help Canadian students submit fewer, stronger, and more relevant applications without sacrificing honesty.

What it does

InternshipCounsellor is a co-op application command center that brings the main parts of the application process into one workflow:

Add a job posting → analyze its requirements → compare it with confirmed experience → create a tailored resume → export it as a PDF → track the application.

Students can paste a job description from a posting they find online and save the original URL for reference. The AI extracts structured requirements such as:

  • Skills and technologies
  • Education and experience
  • Certifications
  • Language requirements
  • Work authorization

Each student maintains a Master Profile containing their real projects, skills, employment history, accomplishments, and approved resume content.

InternshipCounsellor compares the job requirements with this confirmed information and shows which requirements are supported by evidence and which remain unmatched.

The tailoring system then selects and rearranges the student’s most relevant confirmed content into a job-specific resume. The student reviews the result and exports it through the browser as a PDF before submitting it on the employer’s original website.

The platform also includes application tracking, allowing students to manage saved, prepared, submitted, interviewing, rejected, and completed applications in one place.

How we built it

InternshipCounsellor was built with:

  • Next.js and TypeScript
  • Tailwind CSS and shadcn/ui
  • Supabase Postgres and Authentication
  • Row Level Security
  • Server-side OpenAI integrations
  • Structured outputs with application and database validation

The most important engineering work focused on constraining the AI.

Instead of allowing the model to freely invent resume content, the system provides references to information that the student has already confirmed. The AI can select, prioritize, and rearrange that evidence, but its output is validated before it can be stored or displayed.

Deterministic logic is used wherever possible. Matching confirmed skills against extracted job requirements does not require AI-generated opinions or a misleading overall percentage. The student can inspect individual matched and unmatched requirements directly.

I used Codex and GPT-5.6 throughout development to accelerate implementation, debugging, database migrations, test creation, architectural review, and security analysis.

To maintain quality, I divided development into narrowly specified tasks. Each major feature was guided by written product and technical specifications, explicit constraints, verification requirements, and a documented Codex development session.

Key product and engineering decisions remained human-directed, including:

  • Confirmed evidence as the resume trust boundary
  • No fabricated experience or automatic applications
  • Deterministic and explainable matching
  • Private profiles and job descriptions
  • Server-side model access
  • Atomic AI-credit handling
  • Immutable tailored-resume versions
  • Strict authentication and database ownership controls

Challenges we ran into

The hardest challenge was turning “the AI should not lie” into a real technical guarantee.

A prompt that tells the model not to hallucinate is not enough. I had to narrow what information the model could use, constrain its output format, and validate the result against the student’s confirmed evidence.

Another challenge was handling failed AI operations fairly. Model requests can fail, time out, or return invalid data. Charging a student immediately would consume a credit even when no usable resume was produced.

To solve this, I built a credit reservation system. A credit is reserved before generation, consumed only after a valid result is successfully stored, and refunded when an eligible failure occurs.

Database security was also challenging. Static code review could not prove that users were properly isolated. I repeatedly tested authentication, anonymous access rejection, cross-user access, transaction rollback, duplicate requests, and cleanup against a real Supabase database.

Finally, the application handles sensitive information such as resumes, employment history, and private job descriptions. Privacy and security had to be part of every feature rather than something added at the end.

Accomplishments that we're proud of

I am most proud that InternshipCounsellor became a working product rather than only an AI demonstration.

The completed workflow includes:

  • Private job-posting management
  • Structured job-requirement extraction
  • A reusable Master Profile
  • Evidence-backed Profile Match
  • Job-specific resume tailoring
  • Immutable resume versions
  • Browser PDF export
  • Application tracking
  • Credit-safe AI operations
  • Owner-only database access
  • Extensive automated and live database verification

I am also proud that the system does not hide uncertainty behind an impressive-looking AI score. It clearly shows when information is missing, unmatched, unconfirmed, unavailable, or unsuccessful.

Most importantly, the tailoring workflow is designed to improve how students present their experience without creating experience for them.

What we learned

The biggest lesson was that trust is an architecture, not a disclaimer.

Telling users that AI can make mistakes is not enough. A trustworthy system should structurally limit what the AI is allowed to do and verify its output before accepting it.

I also learned that deterministic systems are often better than unnecessary AI. Matching skills, enforcing ownership, calculating requirement coverage, and tracking application states are clearer and more reliable when they use auditable logic.

GPT-5.6 and Codex significantly accelerated development, but they produced the best results when every task had a narrow scope, precise constraints, and a clear verification plan.

The hard part of AI-assisted development was not generating more code. It was carefully deciding what the code should be allowed to do.

What's next for InternshipCounsellor

The next step is to test InternshipCounsellor with more Canadian co-op students and measure whether evidence-backed tailored resumes improve interview conversion compared with generic applications.

Future development may include:

  • Additional resume templates
  • Evidence-backed cover letters
  • Job-specific interview preparation
  • Better explanations for unmatched requirements
  • University co-op platform integrations
  • Application and interview analytics
  • Carefully bounded job-posting ingestion
  • Collaboration with career advisors and co-op programs

The long-term vision is to give every student a private internship counsellor that understands their real experience, helps them present it clearly, and never sacrifices honesty for convenience.

Built With

Share this project:

Updates