3. Functional Requirements
FR-1 — Product identity and delivery shape (explicit)
As a Job Post Creator, I should use a premium, high-converting, mobile-responsive web application named "TalentHook AI" that operates as an exclusive human-sounding job post generator, so that I can produce hiring posts that read as human-written.
- Trigger/input: Opening the application on any device.
- Observable result: The product presents itself as TalentHook AI, an exclusive human-sounding job post generator, and remains usable and legible across device sizes.
- Access state: Anonymous.
- Failure/recovery: Not applicable.
- Continuation: The creator proceeds to the Generator workspace.
FR-2 — Serverless, client-side architecture under viral load (explicit)
As a Job Post Creator, I should have the entire system architected as a 100% serverless, client-side application, so that massive viral traffic spikes across different devices simultaneously cause no database lag and no server crashes.
- Trigger/input: Many visitors using the product at the same moment on different devices.
- Observable result: Generation, validation, authentication state, clipboard feedback, and download all execute client-side; no shared database is queried and no server-side bottleneck degrades the experience.
- Access state: Anonymous.
- Failure/recovery: Not applicable — there is no server-side dependency to fail.
- Continuation: The creator continues to use the product uninterrupted.
FR-3 — Prompt bar console (explicit)
As a Job Post Creator, I should see a prominent, wide, search-engine-style prompt input console in the center view with the placeholder "Enter job details (e.g., Remote Node.js Dev, 3 Yrs exp, $20k salary)..." accompanied by an "Engine Start" button, so that I can describe a vacancy in plain language and start generation.
- Trigger/input: Typing job details into the console and pressing "Engine Start".
- Observable result: The console accepts the job details text and the Engine Start button initiates the generation pipeline.
- Access state: Anonymous.
- Failure/recovery: If the input is blocked by the validation firewall, the denial banner appears and generation does not run (see FR-6).
- Continuation: The creator watches the loading pipeline and receives the finalized post.
FR-4 — Target Platform dropdown (explicit)
As a Job Post Creator, I should have a stylized interactive selection dropdown component titled "Target Platform" placed immediately next to the prompt bar, with pre-configured filters [Universal Omni-Post, LinkedIn Feed, Naukri Elite, Indeed Standard, Corporate Portal], so that I can shape the post for the platform where I will publish it.
- Trigger/input: Selecting one of the five pre-configured filters.
- Observable result: The selected platform becomes the active filter and governs the formatting of the generated post.
- Access state: Anonymous.
- Failure/recovery: Not applicable — the five filters are pre-configured and always available.
- Continuation: The creator presses "Engine Start" and the post is generated for the selected platform.
FR-5 — Client-side input scanning before processing (explicit)
As a Job Post Creator, I should have a robust client-side string-filtering security middleware layer scan all inputs before processing, so that misuse is caught before any generation work begins.
- Trigger/input: Any input submitted to the engine.
- Observable result: The input is scanned client-side before processing; only inputs describing job vacancies and hiring specifications proceed.
- Access state: Anonymous.
- Failure/recovery: Blocked inputs never reach the generator loop.
- Continuation: Clean inputs proceed to generation; blocked inputs trigger FR-6.
FR-6 — Anti-misuse validation firewall and denial banner (explicit)
As a Job Post Creator, I should have execution blocked when my input contains phrases or tokens related to image generation, video creation, coding assignments, or non-recruitment chat topics, and I should immediately see a bold red warning notification banner across the screen reading "\xe2\x9d\x8c Access Denied: TalentHook AI exclusively processes job vacancies and hiring specifications. Media generation modules are deactivated.", so that I understand the product's exclusive scope.
- Trigger/input: Input containing phrases or tokens related to image generation, video creation, coding assignments, or non-recruitment chat topics.
- Observable result: Execution is blocked and the bold red warning banner appears across the screen with the exact denial copy.
- Access state: Anonymous.
- Failure/recovery: The creator edits the prompt to describe a job vacancy and hiring specification; the banner clears and generation can run.
- Continuation: The creator re-runs "Engine Start" with a compliant prompt.
FR-7 — Executive headhunter system prompt and cliché stripping (explicit)
As a Job Post Creator, I should have a secret system prompt context routing logic inside the generator loop that makes the output engine act as an elite executive headhunter and automatically strip all robotic AI clichés — including "Are you ready to level up?", "Look no further", and "Exciting opportunity" — so that the resulting post never sounds machine-written.
- Trigger/input: A validated prompt reaching the generator loop.
- Observable result: The generated text contains none of the named robotic AI clichés and reads in the voice of an elite executive headhunter.
- Access state: Anonymous.
- Failure/recovery: Not applicable — the routing logic is hardcoded into the generator loop.
- Continuation: The creator reviews the cliché-free post in the output card.
FR-8 — Pattern-interrupting human hook line (explicit)
As a Job Post Creator, I should have the generated text open immediately with a pattern-interrupting human hook line designed to stop the scroll on LinkedIn, so that the post earns attention in a crowded feed.
- Trigger/input: A validated prompt reaching the generator loop.
- Observable result: The finalized post begins with a human hook line rather than a conventional opening.
- Access state: Anonymous.
- Failure/recovery: Not applicable.
- Continuation: The creator reads the hook line and the segments that follow.
FR-9 — Three-segment transparent structure (explicit)
As a Job Post Creator, I should have the generated text automatically structured into three clear, transparent segments — The Reality (What you'll do), What We Need (The actual skills/stack), and The Trade-Offs (Salary, Remote setup, Benefits) — so that job seekers get exactly the information they care about.
- Trigger/input: A validated prompt reaching the generator loop.
- Observable result: The finalized post contains all three segments with their stated content: The Reality covering what the hire will do, What We Need covering the actual skills and stack, and The Trade-Offs covering salary, remote setup, and benefits.
- Access state: Anonymous.
- Failure/recovery: Not applicable.
- Continuation: The creator copies or downloads the structured post.
FR-10 — Sign In / Join controller and social authentication vectors (explicit)
As a Platform Visitor / Prospective Member, I should see a glowing "Sign In / Join" action controller in the header navigation navbar that, when clicked, toggles a beautiful modal window featuring two distinct, styled social authentication vectors — "Continue with Google" and "Continue with LinkedIn" — so that I can choose how to sign in.
- Trigger/input: Clicking the glowing "Sign In / Join" controller in the header navbar.
- Observable result: The modal window toggles open and presents both styled social authentication vectors.
- Access state: Anonymous.
- Failure/recovery: The modal can be closed and reopened from the header navbar.
- Continuation: The visitor selects one of the two vectors.
FR-11 — In-memory authentication state and Authenticated profile view (explicit)
As a Platform Visitor / Prospective Member, I should have the authentication toggle state managed purely in local React memory so that clicking a social authentication vector updates the UI instantly to an "Authenticated" profile view, so that sign-in feels immediate and requires no server round trip.
- Trigger/input: Clicking "Continue with Google" or "Continue with LinkedIn".
- Observable result: The UI updates instantly to the Authenticated profile view, held purely in local React memory.
- Access state: Anonymous entry; the resulting state is local and in-memory only.
- Failure/recovery: Because the state is in-memory, closing or refreshing the tab returns the product to the unauthenticated state; the visitor can sign in again from the header navbar.
- Continuation: The visitor continues browsing or generating with the Authenticated profile view shown.
FR-12 — How It Works overlay modal (explicit)
As a Platform Visitor / Prospective Member, I should be able to open a high-fidelity overlay modal card for "How It Works" from a navigation link, containing a clean, bulleted operational tutorial checklist showing how TalentHook AI hooks top talent, so that I understand the workflow before generating.
- Trigger/input: Activating the "How It Works" navigation link.
- Observable result: The overlay modal card opens and displays the bulleted operational tutorial checklist.
- Access state: Anonymous.
- Failure/recovery: The overlay can be closed and reopened at any time.
- Continuation: The visitor proceeds to the Generator or to another informational overlay.
FR-13 — Pricing Plans overlay modal (explicit)
As a Platform Visitor / Prospective Member, I should be able to open a high-fidelity overlay modal card for "Pricing Plans" from a navigation link, containing a beautiful tier comparison matrix presenting a $0 Free Tier alongside a $39/month Corporate Tier, so that I can judge which tier fits me.
- Trigger/input: Activating the "Pricing Plans" navigation link.
- Observable result: The overlay modal card opens and displays the tier comparison matrix with the $0 Free Tier and the $39/month Corporate Tier.
- Access state: Anonymous.
- Failure/recovery: The overlay can be closed and reopened at any time.
- Continuation: The visitor proceeds to the Generator or to another informational overlay.
FR-14 — Terms & Conditions overlay modal with stateless privacy policy (explicit)
As a Platform Visitor / Prospective Member, I should be able to open a high-fidelity overlay modal card for "Terms & Conditions" from a navigation link, containing legal copy stating a strict 100% Stateless Privacy Policy — declaring that zero job details or user search strings are ever stored on an external server, and that everything is permanently purged upon closing or refreshing the tab — so that I can trust the product with my hiring details.
- Trigger/input: Activating the "Terms & Conditions" navigation link.
- Observable result: The overlay modal card opens and displays the legal copy stating the 100% Stateless Privacy Policy and the purge-on-close-or-refresh guarantee.
- Access state: Anonymous.
- Failure/recovery: The overlay can be closed and reopened at any time.
- Continuation: The visitor proceeds to the Generator with confidence in the privacy guarantee.
FR-15 — Loading skeleton text animation loop (explicit)
As a Job Post Creator, I should see a high-fidelity loading skeleton text animation loop during generation, cycling messages such as "Purging corporate AI cliches..." and "Formatting for Naukri standard layouts...", so that I can see the engine working and understand what it is doing.
- Trigger/input: Pressing "Engine Start" with a validated prompt.
- Observable result: The loading skeleton text animation loop runs, cycling the pipeline messages including the two named examples.
- Access state: Anonymous.
- Failure/recovery: If generation cannot proceed because the input was blocked, the denial banner appears instead (see FR-6).
- Continuation: The loop resolves into the finalized post in the obsidian output card.
FR-16 — Obsidian output card (explicit)
As a Job Post Creator, I should have the finalized text rendered into a beautiful obsidian copy card, so that the finished post is presented as a distinct, premium artifact.
- Trigger/input: Completion of the generation pipeline.
- Observable result: The finalized text renders in the obsidian copy card, showing the hook line and the three segments.
- Access state: Anonymous.
- Failure/recovery: Not applicable.
- Continuation: The creator copies or downloads the post.
FR-17 — Copy to Clipboard with floating success animation (explicit)
As a Job Post Creator, I should have a functional "Copy to Clipboard" trigger on the output card with a floating success animation, so that I can move the post into LinkedIn, Naukri, Indeed, or a corporate portal with one action and know it worked.
- Trigger/input: Activating "Copy to Clipboard" on the obsidian output card.
- Observable result: The finalized post text is copied to the clipboard and a floating success animation plays.
- Access state: Anonymous.
- Failure/recovery: If the copy does not register, the creator can activate the trigger again; the post remains visible in the output card.
- Continuation: The creator pastes the post into the target platform.
FR-18 — Download Text File (explicit)
As a Job Post Creator, I should have a client-side "Download Text File" button alongside the copy trigger, so that I can save the finalized post locally without any server involvement.
- Trigger/input: Activating "Download Text File" on the obsidian output card.
- Observable result: A text file containing the finalized post is downloaded to the creator's device, generated entirely client-side.
- Access state: Anonymous.
- Failure/recovery: If the download does not start, the creator can activate the button again; the post remains visible in the output card.
- Continuation: The creator opens or shares the downloaded text file.
**FR-19 —
No comments yet. Be the first!