TedSubmit - AI Cover Letter & Proposal Generator

The Need

Job seekers applying to multiple positions spend hours crafting tailored cover letters for each posting. The work is repetitive, and the results tend to be generic. Freelancers face the same challenge with client proposals. There was no tool that could take a candidate’s full professional profile, combine it with a specific job description, and produce a personalized, role-specific response in seconds.

The Approach

I built TedSubmit, a full SaaS application that turns profile data and job postings into tailored responses using AI. The system handles the entire workflow, from importing candidate information to generating and refining cover letters and proposals.

Key work included:

  • Profile management: Import candidate profiles from LinkedIn PDF exports using AI-powered extraction, or enter them manually. The system stores experience, skills, education, certifications, languages, and contact information.
  • Job post collection: Manual entry or bulk URL import with Playwright-based web scraping that handles JavaScript-heavy sites like Indeed. AI extracts structured job data from raw HTML.
  • AI response generation: The OpenAI Responses API generates tailored cover letters (for employees) or freelance proposals (for freelancers) from profile and job post pairs.
  • Iterative refinement: A revision chain system lets users provide follow-up prompts to refine generated responses through multiple iterations.
  • Usage quotas and billing: Configurable limit bundles (tiers) for monthly job posts, responses, profiles, and iteration depth. Stripe handles subscription billing and plan upgrades. An admin dashboard manages plans and user access.
  • Dashboard and analytics: Overview of total responses, applications sent, response types, and recent activity.
  • Async processing: AI generation runs through a queue system to offload long-running operations (up to 300 seconds) from the request cycle.

Tech Stack

  • Backend: PHP 8.4, Laravel 12
  • Frontend: Vue 3, Inertia.js v2, TypeScript
  • Styling: Tailwind CSS v4
  • UI Components: Reka UI, Lucide icons, vue-sonner (toasts), class-variance-authority
  • Database: MySQL 8
  • AI Integration: OpenAI API (Responses API, Files API)
  • Web Scraping: Playwright
  • Payments: Stripe (subscription billing)
  • Infrastructure: Docker (Laravel Sail), Caddy reverse proxy, GitHub Actions CI
  • Storage: Cloudflare R2
  • Monitoring: Sentry (error tracking), Laravel Nightwatch
  • Code Quality: Pest v4 (testing and browser tests), PHPStan/Larastan (static analysis), Pint + Rector (PHP formatting/refactoring), ESLint + Prettier (JS/Vue)

Outcomes

  • Seconds instead of hours: A tailored cover letter or proposal generated in seconds from a full candidate profile and job description.
  • One profile, unlimited applications: Import once from LinkedIn or enter manually, then reuse across every application.
  • Bulk job imports: Paste multiple job URLs and the system scrapes, parses, and structures them all in one go.
  • Refine until it’s right: Built-in revision chains let users iterate on responses with follow-up prompts, not start from scratch.
  • Responsive throughout: AI generation runs in the background, so the interface stays fast even during long operations.

TedSubmit is live and available to use. Try it at tedsubmit.com. For custom tools, get in touch or visit tedbin.com.