{"id":1251,"date":"2026-02-09T21:44:30","date_gmt":"2026-02-10T02:44:30","guid":{"rendered":"https:\/\/fixyourowncredit.studio1live.com\/downloads\/?p=1251"},"modified":"2026-02-09T21:44:33","modified_gmt":"2026-02-10T02:44:33","slug":"train-your-own-ai-in-20-minutes-the-jacai-training-builder","status":"publish","type":"post","link":"https:\/\/fixyourowncredit.studio1live.com\/downloads\/train-your-own-ai-in-20-minutes-the-jacai-training-builder\/","title":{"rendered":"Train Your Own AI in 20 Minutes: The JacAI Training Builder"},"content":{"rendered":"<body>\n<p>Free \/ $5 Community Support)<\/p>\n\n\n\n<p>If you\u2019ve ever said \u201cI wish AI answered like <em>me<\/em>,\u201d this is the missing piece.<\/p>\n\n\n\n<p>Most people don\u2019t need a complex engineering team, a lab, or months of coding to start shaping how AI responds. What they need is a simple way to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>write example questions people actually ask,<\/li>\n\n\n\n<li>write the best answers they want the AI to learn,<\/li>\n\n\n\n<li>export it in the correct format (JSONL),<\/li>\n\n\n\n<li>upload it to the training dashboard,<\/li>\n\n\n\n<li>and start getting responses that match their tone and structure.<\/li>\n<\/ul>\n\n\n\n<p>That\u2019s exactly why I built <strong>JacAI Training Builder<\/strong>.<\/p>\n\n\n\n<p>This is a self-contained tool (web-based, no database required) that helps you create and export training files in the exact JSONL format used for fine-tuning\/training workflows. It runs anywhere: your website folder, your laptop, or later as a desktop app.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why this matters (especially for non-tech people)<\/h3>\n\n\n\n<p>I keep seeing the same problem: people <em>want<\/em> AI but they can\u2019t get past setup complexity.<\/p>\n\n\n\n<p>Even in my own circle, I ran into this with a client I call \u201cDickie.\u201d He didn\u2019t even know how to access ChatGPT or how to ask the kinds of questions that get useful answers. But once I showed him a tool where he can paste Q&amp;A pairs and press \u201cDownload JSONL,\u201d he immediately understood the value.<\/p>\n\n\n\n<p>That\u2019s the whole point: <strong>reduce the friction<\/strong> so regular people can build useful AI behavior without having to learn a developer workflow.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">What JacAI Training Builder does<\/h2>\n\n\n\n<p>At its core, the tool has one job:<\/p>\n\n\n\n<p><strong>Turn your knowledge into a training dataset (JSONL) you can upload to your training dashboard.<\/strong><\/p>\n\n\n\n<p>You can:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Add training examples one at a time (User prompt \u2192 Assistant answer)<\/li>\n\n\n\n<li>Add an optional <strong>System Prompt<\/strong> that gets attached to every training entry<\/li>\n\n\n\n<li>Bulk import many examples at once (batch mode)<\/li>\n\n\n\n<li>Preview the batch import so you can catch formatting mistakes before importing<\/li>\n\n\n\n<li>Export:\n<ul class=\"wp-block-list\">\n<li><strong>JSONL (messages format)<\/strong> (recommended)<\/li>\n\n\n\n<li><strong>JSONL (prompt\/completion)<\/strong> (legacy \/ optional)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Import existing JSONL back into the editor<\/li>\n\n\n\n<li>Save everything locally in your browser (no server needed)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Batch import formats supported<\/h3>\n\n\n\n<p>You can paste training pairs in either format:<\/p>\n\n\n\n<p><strong>Format A: <code>===PAIR===<\/code> blocks<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Most structured, best for big imports<\/li>\n<\/ul>\n\n\n\n<p><strong>Format B: <code>Q:<\/code> \/ <code>A:<\/code> pairs<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fast and simple, great for everyday use<\/li>\n<\/ul>\n\n\n\n<p>So whether you write like a power user or like a normal person taking notes, it still works.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">Who this is for<\/h2>\n\n\n\n<p>This tool is built for people who want AI responses that match a specific style, industry, or mission, including:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>legal educators and self-help communities<\/li>\n\n\n\n<li>coaches and consultants<\/li>\n\n\n\n<li>small business owners who want a consistent \u201cassistant voice\u201d<\/li>\n\n\n\n<li>content creators who want AI that matches their brand tone<\/li>\n\n\n\n<li>social media managers building repeatable content systems<\/li>\n\n\n\n<li>teams that need standardized answers and scripts<\/li>\n<\/ul>\n\n\n\n<p>You don\u2019t have to be technical. If you can write a question and write an answer, you can build a dataset.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">Free vs $5 community version<\/h2>\n\n\n\n<p>I\u2019m releasing the starter build in two ways:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Free DIY Build<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you have the time and basic skills, you can build it yourself using the instructions below.<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>$5 Community Support Version<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you don\u2019t want to spend time building, don\u2019t have the tools, or just want to support what we\u2019re building, you can grab the ready-to-run version for $5.<\/li>\n\n\n\n<li>Same tool, ready to upload and run.<\/li>\n<\/ul>\n\n\n\n<p>The $5 isn\u2019t about locking people out. It\u2019s about supporting the community and the development path\u2014because the next version (Pro) is going to be serious.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">How to install (basic)<\/h2>\n\n\n\n<p>This tool is self-contained: it\u2019s just HTML + CSS + JavaScript.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Option 1: Run on your website (cPanel \/ hosting)<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create a folder like:\n<ul class=\"wp-block-list\">\n<li><code>\/training-builder\/<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Upload the files into that folder<\/li>\n\n\n\n<li>Visit it in your browser and use it<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Option 2: Run locally on your laptop<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Download the folder<\/li>\n\n\n\n<li>Open <code>index.html<\/code> in your browser<\/li>\n\n\n\n<li>Start creating training examples immediately<\/li>\n<\/ol>\n\n\n\n<p>No database. No PHP. No logins. No dependencies.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">How to use (basic workflow)<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Write a strong <strong>System Prompt<\/strong> (optional, but recommended)<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This defines the \u201cvoice\u201d and boundaries of the AI<\/li>\n\n\n\n<li>Example: \u201cExplain in simple steps, provide checklists, do not claim to be a lawyer, be direct and helpful.\u201d<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Add training examples:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>user prompt = the question people ask<\/li>\n\n\n\n<li>assistant answer = the best response you want the AI to learn<\/li>\n<\/ul>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Use Batch Import if you have a lot of examples<\/li>\n\n\n\n<li>Export JSONL (messages format)<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This is the format most training dashboards accept.<\/li>\n<\/ul>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Upload the JSONL in your model training dashboard<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You will see a validation step. If your file is clean, training can begin.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">What to include in a strong dataset<\/h2>\n\n\n\n<p>A lot of people think \u201cmore data\u201d is the goal. It\u2019s not.<\/p>\n\n\n\n<p><strong>Better examples<\/strong> beat more examples.<\/p>\n\n\n\n<p>Good examples include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>realistic user questions<\/li>\n\n\n\n<li>structured answers (steps, bullets, scripts)<\/li>\n\n\n\n<li>consistent tone<\/li>\n\n\n\n<li>disclaimers if needed (especially legal\/medical\/financial topics)<\/li>\n\n\n\n<li>edge cases (confusing situations, missing info, hostile user tone)<\/li>\n<\/ul>\n\n\n\n<p>If you want AI to behave professionally, write examples like a professional.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">Why I\u2019m building this under JacAI<\/h2>\n\n\n\n<p>JacAI is the brand because it\u2019s bigger than one tool.<\/p>\n\n\n\n<p>This Training Builder is the \u201cdataset engine.\u201d Later, JacAI becomes a family of simplified AI agents (legal, content, business, automation). The common thread is the same:<\/p>\n\n\n\n<p><strong>We\u2019re focused on the user relationship with AI<\/strong> \u2014 how to make powerful AI usable for people who aren\u2019t technical.<\/p>\n\n\n\n<p>For now, I\u2019m launching the legal campaign first because the demand is real, and people need help organizing their cases and understanding what to do next. The Training Builder is one of the core tools behind that mission.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">Get it (Free build or $5 support)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you want the tool right now and don\u2019t want to build it: grab the <strong>$5 community version<\/strong>.<\/li>\n\n\n\n<li>If you want to build it yourself: follow the instructions on this page and you\u2019re good.<\/li>\n<\/ul>\n\n\n\n<p>Either way, you\u2019ll be able to train AI to respond more like <em>you<\/em>\u2014and that\u2019s a major step beyond \u201cgeneric chatbot answers.\u201d<\/p>\n\n\n\n<p><strong>Next up:<\/strong> I\u2019m building the Pro version (not public) with advanced features that make training cleaner, faster, and more valuable for businesses.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">Pro version plan (private, not shown publicly)<\/h2>\n\n\n\n<p>The Pro build is where we add:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>multiple projects\/datasets (Legal, SMM, etc.)<\/li>\n\n\n\n<li>dataset quality checks (duplicates, missing sections, too-short answers)<\/li>\n\n\n\n<li>PII warnings + one-click redaction<\/li>\n\n\n\n<li>tag\/category labeling<\/li>\n\n\n\n<li>train\/validation split export<\/li>\n\n\n\n<li>version snapshots (v1\/v2\/v3)<\/li>\n\n\n\n<li>dataset stats (counts, lengths, warnings)<\/li>\n<\/ul>\n\n\n\n<p>If you\u2019re serious about training AI the right way, that\u2019s where it gets powerful.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h1 class=\"wp-block-heading\">Pro version scope (what I recommend you charge)<\/h1>\n\n\n\n<p><strong>Two-tier lineup (your plan):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Starter<\/strong>: Free \/ $5 community support<\/li>\n\n\n\n<li><strong>Pro<\/strong>: Paid<\/li>\n<\/ul>\n\n\n\n<p>For Pro pricing that matches \u201creal value,\u201d I\u2019d position it like:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>$49<\/strong> (intro)<\/li>\n\n\n\n<li>or <strong>$79\u2013$99<\/strong> (once you bundle the help pages + upgrade polish + project manager + quality checks)<\/li>\n<\/ul>\n\n\n\n<p>If you later wrap it as an Electron desktop installer, the perceived value jumps.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">Build Instructions <\/h2>\n\n\n\n<p><strong>self-contained Training Builder<\/strong> that runs anywhere (web folder, WP plugin wrapper, Electron later) and <strong>only outputs JSONL<\/strong> for the user to upload into their own model dashboard, you can do it in <strong>3 files<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>index.html<\/code><\/li>\n\n\n\n<li><code>app.js<\/code><\/li>\n\n\n\n<li><code>style.css<\/code><\/li>\n<\/ul>\n\n\n\n<p>No database, no server required. It stores drafts in <code>localStorage<\/code>, supports bulk paste, and exports <strong>NDJSON\/JSONL<\/strong> in the fine-tune \u201cmessages\u201d format.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">File 1 \u2014 <code>index.html<\/code><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!doctype html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n  &lt;meta charset=\"utf-8\" \/&gt;\n  &lt;meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" \/&gt;\n  &lt;title&gt;JacAI Training Builder (Offline JSONL Export)&lt;\/title&gt;\n  &lt;link rel=\"stylesheet\" href=\".\/style.css\" \/&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n  &lt;header class=\"topbar\"&gt;\n    &lt;div class=\"brand\"&gt;\n      &lt;div class=\"logo\"&gt;J&lt;\/div&gt;\n      &lt;div&gt;\n        &lt;div class=\"title\"&gt;JacAI Training Builder&lt;\/div&gt;\n        &lt;div class=\"subtitle\"&gt;Offline tool \u2192 builds JSONL \/ NDJSON for fine-tuning&lt;\/div&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n    &lt;div class=\"top-actions\"&gt;\n      &lt;button id=\"btnExport\" class=\"btn primary\"&gt;Download JSONL&lt;\/button&gt;\n      &lt;button id=\"btnExportRaw\" class=\"btn\"&gt;Download \u201cprompt\/completion\u201d JSONL&lt;\/button&gt;\n      &lt;button id=\"btnReset\" class=\"btn danger\"&gt;Reset&lt;\/button&gt;\n    &lt;\/div&gt;\n  &lt;\/header&gt;\n\n  &lt;main class=\"wrap\"&gt;\n    &lt;section class=\"grid\"&gt;\n      &lt;div class=\"card\"&gt;\n        &lt;h2&gt;System Prompt&lt;\/h2&gt;\n        &lt;p class=\"muted\"&gt;This is prepended to every example as the first message.&lt;\/p&gt;\n        &lt;textarea id=\"systemPrompt\" class=\"ta\" rows=\"6\" placeholder=\"Example: You are JacAI Legal Coach. You write clear, structured, educational answers. You do not claim to be an attorney. You give procedural guidance, checklists, and drafting help.\"&gt;&lt;\/textarea&gt;\n\n        &lt;div class=\"row\"&gt;\n          &lt;label class=\"check\"&gt;\n            &lt;input type=\"checkbox\" id=\"includeSystemPrompt\" checked \/&gt;\n            Include system prompt in export\n          &lt;\/label&gt;\n\n          &lt;label class=\"check\"&gt;\n            &lt;input type=\"checkbox\" id=\"prettyJsonl\" \/&gt;\n            Pretty-print JSON (larger files)\n          &lt;\/label&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n\n      &lt;div class=\"card\"&gt;\n        &lt;h2&gt;Add Example&lt;\/h2&gt;\n        &lt;div class=\"field\"&gt;\n          &lt;label&gt;User prompt \/ fact pattern&lt;\/label&gt;\n          &lt;textarea id=\"userPrompt\" class=\"ta\" rows=\"5\" placeholder=\"Example: I received a notice of hearing for child support. What should I bring and how should I speak to the judge?\"&gt;&lt;\/textarea&gt;\n        &lt;\/div&gt;\n\n        &lt;div class=\"field\"&gt;\n          &lt;label&gt;Assistant answer&lt;\/label&gt;\n          &lt;textarea id=\"assistantAnswer\" class=\"ta\" rows=\"6\" placeholder=\"Example: Here\u2019s a structured checklist: 1) documents to bring, 2) what the hearing decides, 3) objections, 4) script, 5) next steps.\"&gt;&lt;\/textarea&gt;\n        &lt;\/div&gt;\n\n        &lt;div class=\"row\"&gt;\n          &lt;button id=\"btnAdd\" class=\"btn primary\"&gt;Add&lt;\/button&gt;\n          &lt;button id=\"btnUpdate\" class=\"btn\" disabled&gt;Update Selected&lt;\/button&gt;\n          &lt;button id=\"btnClearForm\" class=\"btn\"&gt;Clear&lt;\/button&gt;\n        &lt;\/div&gt;\n\n        &lt;div class=\"hint\"&gt;\n          Tip: You can also use &lt;strong&gt;Bulk Import&lt;\/strong&gt; (below) to paste multiple Q&amp;A pairs at once.\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n\n      &lt;div class=\"card\"&gt;\n        &lt;h2&gt;Bulk Import&lt;\/h2&gt;\n        &lt;p class=\"muted\"&gt;\n          Paste multiple examples. Format options:\n          &lt;br&gt;&lt;code&gt;Q: ...&lt;\/code&gt; then &lt;code&gt;A: ...&lt;\/code&gt; (repeat), or\n          &lt;br&gt;separate blocks with &lt;code&gt;---&lt;\/code&gt;.\n        &lt;\/p&gt;\n        &lt;textarea id=\"bulkInput\" class=\"ta\" rows=\"10\" placeholder=\"Q: Question 1\nA: Answer 1\n---\nQ: Question 2\nA: Answer 2\"&gt;&lt;\/textarea&gt;\n\n        &lt;div class=\"row\"&gt;\n          &lt;button id=\"btnBulkParse\" class=\"btn primary\"&gt;Import Pairs&lt;\/button&gt;\n          &lt;button id=\"btnBulkClear\" class=\"btn\"&gt;Clear Bulk&lt;\/button&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n\n      &lt;div class=\"card\"&gt;\n        &lt;h2&gt;Import JSONL&lt;\/h2&gt;\n        &lt;p class=\"muted\"&gt;\n          Load an existing JSONL file back into the editor (messages format).\n        &lt;\/p&gt;\n        &lt;input id=\"fileImport\" type=\"file\" accept=\".jsonl,.ndjson,.txt,application\/json\" \/&gt;\n        &lt;div class=\"row\"&gt;\n          &lt;button id=\"btnImport\" class=\"btn primary\"&gt;Import File&lt;\/button&gt;\n          &lt;button id=\"btnExportBackup\" class=\"btn\"&gt;Download Backup (.json)&lt;\/button&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n    &lt;\/section&gt;\n\n    &lt;section class=\"card table-card\"&gt;\n      &lt;div class=\"table-head\"&gt;\n        &lt;h2&gt;Training Examples&lt;\/h2&gt;\n        &lt;div class=\"table-actions\"&gt;\n          &lt;input id=\"search\" class=\"search\" placeholder=\"Search\u2026\" \/&gt;\n          &lt;button id=\"btnDeleteSelected\" class=\"btn danger\" disabled&gt;Delete Selected&lt;\/button&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n\n      &lt;div id=\"msg\" class=\"msg\" hidden&gt;&lt;\/div&gt;\n\n      &lt;div class=\"table-wrap\"&gt;\n        &lt;table&gt;\n          &lt;thead&gt;\n            &lt;tr&gt;\n              &lt;th style=\"width:38px;\"&gt;&lt;\/th&gt;\n              &lt;th style=\"width:60px;\"&gt;ID&lt;\/th&gt;\n              &lt;th&gt;User Prompt&lt;\/th&gt;\n              &lt;th&gt;Assistant Answer&lt;\/th&gt;\n              &lt;th style=\"width:140px;\"&gt;Actions&lt;\/th&gt;\n            &lt;\/tr&gt;\n          &lt;\/thead&gt;\n          &lt;tbody id=\"rows\"&gt;&lt;\/tbody&gt;\n        &lt;\/table&gt;\n      &lt;\/div&gt;\n\n      &lt;div class=\"footer-note muted\"&gt;\n        Stored locally in your browser (localStorage). No server required.\n      &lt;\/div&gt;\n    &lt;\/section&gt;\n  &lt;\/main&gt;\n\n  &lt;footer class=\"foot\"&gt;\n    &lt;div class=\"muted\"&gt;\n      Output formats:\n      &lt;strong&gt;messages JSONL&lt;\/strong&gt; (recommended) and optional &lt;strong&gt;prompt\/completion JSONL&lt;\/strong&gt;.\n    &lt;\/div&gt;\n  &lt;\/footer&gt;\n\n  &lt;script src=\".\/app.js\"&gt;&lt;\/script&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">File 2 \u2014 <code>style.css<\/code><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>:root{\n  --bg:#020617;\n  --card:#0b1224;\n  --card2:#0a1020;\n  --border:#1f2a44;\n  --text:#e5e7eb;\n  --muted:#9aa4b2;\n  --accent:#38bdf8;\n  --good:#22c55e;\n  --warn:#f97316;\n  --bad:#ef4444;\n}\n\n*{box-sizing:border-box}\nhtml,body{height:100%}\nbody{\n  margin:0;\n  font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;\n  background:radial-gradient(900px 400px at 10% 0%, rgba(56,189,248,.18), transparent 60%),\n             radial-gradient(900px 400px at 90% 0%, rgba(34,197,94,.14), transparent 60%),\n             var(--bg);\n  color:var(--text);\n}\n\n.topbar{\n  position:sticky;\n  top:0;\n  z-index:10;\n  background:rgba(2,6,23,.86);\n  backdrop-filter: blur(10px);\n  border-bottom:1px solid rgba(31,42,68,.65);\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  padding:12px 16px;\n  gap:12px;\n}\n\n.brand{display:flex;align-items:center;gap:12px}\n.logo{\n  width:38px;height:38px;border-radius:12px;\n  display:grid;place-items:center;\n  border:1px solid rgba(56,189,248,.45);\n  background:linear-gradient(135deg, rgba(56,189,248,.18), rgba(34,197,94,.12));\n  font-weight:900;\n}\n.title{font-weight:800;letter-spacing:.02em}\n.subtitle{font-size:.85rem;color:var(--muted)}\n\n.top-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}\n\n.wrap{max-width:1180px;margin:18px auto;padding:0 14px 28px}\n.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}\n@media (max-width: 980px){.grid{grid-template-columns:1fr}}\n\n.card{\n  background:linear-gradient(180deg, rgba(11,18,36,.92), rgba(10,16,32,.92));\n  border:1px solid rgba(31,42,68,.75);\n  border-radius:16px;\n  padding:14px 14px;\n  box-shadow:0 18px 45px rgba(0,0,0,.45);\n}\n\n.card h2{margin:0 0 8px;font-size:1.05rem}\n.muted{color:var(--muted);font-size:.92rem}\n.field{margin-top:10px}\n.field label{display:block;margin-bottom:6px;color:var(--muted);font-size:.86rem}\n\n.ta{\n  width:100%;\n  padding:10px 10px;\n  border-radius:12px;\n  border:1px solid rgba(31,42,68,.9);\n  background:rgba(2,6,23,.65);\n  color:var(--text);\n  resize:vertical;\n  outline:none;\n}\n.ta:focus{border-color:rgba(56,189,248,.75); box-shadow:0 0 0 2px rgba(56,189,248,.12)}\n\n.row{display:flex;gap:10px;align-items:center;margin-top:10px;flex-wrap:wrap}\n.check{display:flex;gap:8px;align-items:center;color:var(--muted);font-size:.9rem}\n\n.btn{\n  border-radius:999px;\n  border:1px solid rgba(56,189,248,.5);\n  background:rgba(15,23,42,.8);\n  color:var(--text);\n  padding:9px 14px;\n  cursor:pointer;\n  font-weight:700;\n  font-size:.9rem;\n}\n.btn:hover{border-color:rgba(56,189,248,.85)}\n.btn:disabled{opacity:.5;cursor:not-allowed}\n.primary{background:rgba(34,197,94,.9);border-color:rgba(34,197,94,.9);color:#052e1a}\n.danger{background:rgba(239,68,68,.14);border-color:rgba(239,68,68,.65);color:#fecaca}\n\n.hint{margin-top:10px;color:var(--muted);font-size:.9rem}\n\n.table-card{margin-top:14px}\n.table-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}\n.table-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap}\n\n.search{\n  padding:9px 12px;border-radius:999px;\n  border:1px solid rgba(31,42,68,.9);\n  background:rgba(2,6,23,.65);\n  color:var(--text);\n  outline:none;\n}\n.search:focus{border-color:rgba(56,189,248,.75); box-shadow:0 0 0 2px rgba(56,189,248,.12)}\n\n.table-wrap{overflow:auto;border-radius:12px;border:1px solid rgba(31,42,68,.7);margin-top:10px}\ntable{width:100%;border-collapse:collapse;min-width:880px}\nth,td{padding:10px 10px;border-bottom:1px solid rgba(31,42,68,.55);vertical-align:top}\nth{color:var(--muted);font-weight:800;font-size:.82rem;text-transform:uppercase;letter-spacing:.06em;background:rgba(2,6,23,.4)}\ntbody tr:nth-child(even){background:rgba(2,6,23,.22)}\n.cell-pre{white-space:pre-wrap}\n\n.actions{display:flex;gap:8px;flex-wrap:wrap}\n.smallbtn{\n  padding:7px 10px;border-radius:999px;\n  border:1px solid rgba(31,42,68,.9);\n  background:rgba(2,6,23,.55);\n  color:var(--text);\n  cursor:pointer;\n  font-weight:700;\n  font-size:.82rem;\n}\n.smallbtn:hover{border-color:rgba(56,189,248,.65)}\n\n.msg{\n  margin-top:10px;\n  padding:10px 12px;\n  border-radius:12px;\n  border:1px solid rgba(31,42,68,.9);\n  background:rgba(2,6,23,.55);\n  font-size:.92rem;\n}\n\n.foot{\n  border-top:1px solid rgba(31,42,68,.65);\n  padding:14px 16px;\n  text-align:center;\n  background:rgba(2,6,23,.62);\n}\n.footer-note{margin-top:10px}\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">File 3 \u2014 <code>app.js<\/code><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>(function () {\n  const LS_KEY = \"jacai_training_builder_v1\";\n\n  const $ = (id) =&gt; document.getElementById(id);\n\n  const state = {\n    systemPrompt: \"\",\n    includeSystemPrompt: true,\n    prettyJsonl: false,\n    items: [], \/\/ {id, user, assistant}\n    selectedId: null,\n    selectedRowIds: new Set(),\n    nextId: 1,\n  };\n\n  function nowStamp() {\n    const d = new Date();\n    const pad = (n) =&gt; String(n).padStart(2, \"0\");\n    return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}_${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`;\n  }\n\n  function showMsg(text) {\n    const el = $(\"msg\");\n    el.hidden = false;\n    el.textContent = text;\n    clearTimeout(showMsg._t);\n    showMsg._t = setTimeout(() =&gt; (el.hidden = true), 3500);\n  }\n\n  function save() {\n    const payload = {\n      ...state,\n      selectedId: null,\n      selectedRowIds: Array.from(state.selectedRowIds),\n    };\n    localStorage.setItem(LS_KEY, JSON.stringify(payload));\n  }\n\n  function load() {\n    const raw = localStorage.getItem(LS_KEY);\n    if (!raw) return;\n    try {\n      const data = JSON.parse(raw);\n      state.systemPrompt = data.systemPrompt || \"\";\n      state.includeSystemPrompt = data.includeSystemPrompt !== false;\n      state.prettyJsonl = !!data.prettyJsonl;\n      state.items = Array.isArray(data.items) ? data.items : [];\n      state.nextId = data.nextId || (state.items.length ? Math.max(...state.items.map(i =&gt; i.id)) + 1 : 1);\n      state.selectedRowIds = new Set(Array.isArray(data.selectedRowIds) ? data.selectedRowIds : []);\n    } catch {\n      \/\/ ignore\n    }\n  }\n\n  function resetAll() {\n    if (!confirm(\"Reset everything? This clears local data.\")) return;\n    localStorage.removeItem(LS_KEY);\n    location.reload();\n  }\n\n  function setSelected(id) {\n    state.selectedId = id;\n    const item = state.items.find((x) =&gt; x.id === id);\n    if (!item) return;\n    $(\"userPrompt\").value = item.user;\n    $(\"assistantAnswer\").value = item.assistant;\n    $(\"btnUpdate\").disabled = false;\n    $(\"btnAdd\").disabled = true;\n  }\n\n  function clearForm() {\n    state.selectedId = null;\n    $(\"userPrompt\").value = \"\";\n    $(\"assistantAnswer\").value = \"\";\n    $(\"btnUpdate\").disabled = true;\n    $(\"btnAdd\").disabled = false;\n  }\n\n  function addItem(user, assistant) {\n    const trimmedU = (user || \"\").trim();\n    const trimmedA = (assistant || \"\").trim();\n    if (!trimmedU || !trimmedA) return false;\n\n    state.items.unshift({\n      id: state.nextId++,\n      user: trimmedU,\n      assistant: trimmedA,\n    });\n    return true;\n  }\n\n  function updateSelected(user, assistant) {\n    const id = state.selectedId;\n    if (!id) return false;\n    const item = state.items.find((x) =&gt; x.id === id);\n    if (!item) return false;\n    const trimmedU = (user || \"\").trim();\n    const trimmedA = (assistant || \"\").trim();\n    if (!trimmedU || !trimmedA) return false;\n    item.user = trimmedU;\n    item.assistant = trimmedA;\n    return true;\n  }\n\n  function deleteOne(id) {\n    state.items = state.items.filter((x) =&gt; x.id !== id);\n    state.selectedRowIds.delete(id);\n    if (state.selectedId === id) clearForm();\n  }\n\n  function deleteSelectedRows() {\n    if (state.selectedRowIds.size === 0) return;\n    if (!confirm(`Delete ${state.selectedRowIds.size} selected example(s)?`)) return;\n    const ids = new Set(state.selectedRowIds);\n    state.items = state.items.filter((x) =&gt; !ids.has(x.id));\n    state.selectedRowIds.clear();\n    clearForm();\n    render();\n    save();\n    showMsg(\"Deleted selected items.\");\n  }\n\n  function toggleRowSelected(id, checked) {\n    if (checked) state.selectedRowIds.add(id);\n    else state.selectedRowIds.delete(id);\n    $(\"btnDeleteSelected\").disabled = state.selectedRowIds.size === 0;\n    save();\n  }\n\n  function downloadText(filename, text, mime = \"text\/plain;charset=utf-8\") {\n    const blob = new Blob([text], { type: mime });\n    const url = URL.createObjectURL(blob);\n    const a = document.createElement(\"a\");\n    a.href = url;\n    a.download = filename;\n    document.body.appendChild(a);\n    a.click();\n    a.remove();\n    setTimeout(() =&gt; URL.revokeObjectURL(url), 250);\n  }\n\n  function buildMessagesJSONL() {\n    const sys = $(\"systemPrompt\").value || \"\";\n    const includeSys = $(\"includeSystemPrompt\").checked;\n    const pretty = $(\"prettyJsonl\").checked;\n\n    const rows = state.items\n      .slice()\n      .reverse()\n      .map((ex) =&gt; {\n        const messages = [];\n        if (includeSys &amp;&amp; sys.trim()) {\n          messages.push({ role: \"system\", content: sys.trim() });\n        }\n        messages.push({ role: \"user\", content: ex.user });\n        messages.push({ role: \"assistant\", content: ex.assistant });\n\n        return { messages };\n      });\n\n    \/\/ NDJSON\/JSONL: one JSON per line\n    return rows\n      .map((obj) =&gt; JSON.stringify(obj, null, pretty ? 2 : 0))\n      .join(\"\\n\") + \"\\n\";\n  }\n\n  function buildPromptCompletionJSONL() {\n    \/\/ Some platforms\/older flows accept prompt\/completion JSONL\n    const pretty = $(\"prettyJsonl\").checked;\n\n    const rows = state.items\n      .slice()\n      .reverse()\n      .map((ex) =&gt; ({\n        prompt: ex.user,\n        completion: ex.assistant,\n      }));\n\n    return rows\n      .map((obj) =&gt; JSON.stringify(obj, null, pretty ? 2 : 0))\n      .join(\"\\n\") + \"\\n\";\n  }\n\n  function parseBulk(text) {\n    const input = (text || \"\").trim();\n    if (!input) return [];\n\n    \/\/ Split by --- blocks first\n    const blocks = input.split(\/\\n-{3,}\\n\/g).map((b) =&gt; b.trim()).filter(Boolean);\n\n    const pairs = [];\n    for (const block of blocks) {\n      \/\/ Try Q:\/A: format\n      const qMatch = block.match(\/(^|\\n)\\s*Q:\\s*([\\s\\S]*?)(\\n\\s*A:\\s*|$)\/i);\n      const aMatch = block.match(\/(^|\\n)\\s*A:\\s*([\\s\\S]*)$\/i);\n\n      if (qMatch &amp;&amp; aMatch) {\n        const q = (qMatch[2] || \"\").trim();\n        const a = (aMatch[2] || \"\").trim();\n        if (q &amp;&amp; a) pairs.push({ user: q, assistant: a });\n        continue;\n      }\n\n      \/\/ Fallback: first line question, rest answer\n      const lines = block.split(\"\\n\");\n      if (lines.length &gt;= 2) {\n        const q = lines[0].trim();\n        const a = lines.slice(1).join(\"\\n\").trim();\n        if (q &amp;&amp; a) pairs.push({ user: q, assistant: a });\n      }\n    }\n    return pairs;\n  }\n\n  async function importJSONLFile(file) {\n    const text = await file.text();\n    const lines = text.split(\/\\r?\\n\/).map(l =&gt; l.trim()).filter(Boolean);\n    const imported = [];\n    let inferredSys = null;\n\n    for (const line of lines) {\n      let obj;\n      try {\n        obj = JSON.parse(line);\n      } catch {\n        continue;\n      }\n\n      \/\/ Accept: {messages:[{role,content},...]}\n      if (obj &amp;&amp; Array.isArray(obj.messages)) {\n        const msgs = obj.messages;\n        const userMsg = msgs.find(m =&gt; m.role === \"user\");\n        const asstMsg = msgs.find(m =&gt; m.role === \"assistant\");\n        const sysMsg = msgs.find(m =&gt; m.role === \"system\");\n\n        if (!inferredSys &amp;&amp; sysMsg &amp;&amp; typeof sysMsg.content === \"string\") {\n          inferredSys = sysMsg.content;\n        }\n\n        if (userMsg?.content &amp;&amp; asstMsg?.content) {\n          imported.push({ user: String(userMsg.content), assistant: String(asstMsg.content) });\n        }\n      }\n\n      \/\/ Accept: {prompt, completion}\n      if (typeof obj?.prompt === \"string\" &amp;&amp; typeof obj?.completion === \"string\") {\n        imported.push({ user: obj.prompt, assistant: obj.completion });\n      }\n    }\n\n    if (inferredSys &amp;&amp; !$(\"systemPrompt\").value.trim()) {\n      $(\"systemPrompt\").value = inferredSys;\n      showMsg(\"Imported system prompt from file.\");\n    }\n\n    let added = 0;\n    for (const p of imported) {\n      if (addItem(p.user, p.assistant)) added++;\n    }\n\n    save();\n    render();\n    showMsg(`Imported ${added} example(s).`);\n  }\n\n  function exportBackupJSON() {\n    const payload = {\n      systemPrompt: $(\"systemPrompt\").value || \"\",\n      includeSystemPrompt: $(\"includeSystemPrompt\").checked,\n      prettyJsonl: $(\"prettyJsonl\").checked,\n      items: state.items,\n      nextId: state.nextId,\n      exportedAt: new Date().toISOString(),\n    };\n    downloadText(`jacai_training_backup_${nowStamp()}.json`, JSON.stringify(payload, null, 2), \"application\/json;charset=utf-8\");\n  }\n\n  function render() {\n    \/\/ sync state from UI\n    state.systemPrompt = $(\"systemPrompt\").value;\n    state.includeSystemPrompt = $(\"includeSystemPrompt\").checked;\n    state.prettyJsonl = $(\"prettyJsonl\").checked;\n\n    const q = ($(\"search\").value || \"\").toLowerCase().trim();\n\n    const rows = $(\"rows\");\n    rows.innerHTML = \"\";\n\n    const filtered = state.items.filter((it) =&gt; {\n      if (!q) return true;\n      return (it.user + \"\\n\" + it.assistant).toLowerCase().includes(q);\n    });\n\n    for (const it of filtered) {\n      const tr = document.createElement(\"tr\");\n\n      const tdSel = document.createElement(\"td\");\n      const cb = document.createElement(\"input\");\n      cb.type = \"checkbox\";\n      cb.checked = state.selectedRowIds.has(it.id);\n      cb.addEventListener(\"change\", () =&gt; toggleRowSelected(it.id, cb.checked));\n      tdSel.appendChild(cb);\n\n      const tdId = document.createElement(\"td\");\n      tdId.textContent = String(it.id);\n\n      const tdU = document.createElement(\"td\");\n      tdU.className = \"cell-pre\";\n      tdU.textContent = it.user;\n\n      const tdA = document.createElement(\"td\");\n      tdA.className = \"cell-pre\";\n      tdA.textContent = it.assistant;\n\n      const tdAct = document.createElement(\"td\");\n      const act = document.createElement(\"div\");\n      act.className = \"actions\";\n\n      const bEdit = document.createElement(\"button\");\n      bEdit.className = \"smallbtn\";\n      bEdit.textContent = \"Edit\";\n      bEdit.addEventListener(\"click\", () =&gt; setSelected(it.id));\n\n      const bDel = document.createElement(\"button\");\n      bDel.className = \"smallbtn\";\n      bDel.textContent = \"Delete\";\n      bDel.addEventListener(\"click\", () =&gt; {\n        if (!confirm(\"Delete this example?\")) return;\n        deleteOne(it.id);\n        save();\n        render();\n        showMsg(\"Deleted.\");\n      });\n\n      act.appendChild(bEdit);\n      act.appendChild(bDel);\n      tdAct.appendChild(act);\n\n      tr.appendChild(tdSel);\n      tr.appendChild(tdId);\n      tr.appendChild(tdU);\n      tr.appendChild(tdA);\n      tr.appendChild(tdAct);\n\n      rows.appendChild(tr);\n    }\n\n    $(\"btnDeleteSelected\").disabled = state.selectedRowIds.size === 0;\n  }\n\n  function bind() {\n    $(\"btnAdd\").addEventListener(\"click\", () =&gt; {\n      const ok = addItem($(\"userPrompt\").value, $(\"assistantAnswer\").value);\n      if (!ok) return showMsg(\"Both fields are required.\");\n      clearForm();\n      save();\n      render();\n      showMsg(\"Added.\");\n    });\n\n    $(\"btnUpdate\").addEventListener(\"click\", () =&gt; {\n      const ok = updateSelected($(\"userPrompt\").value, $(\"assistantAnswer\").value);\n      if (!ok) return showMsg(\"Select an item and complete both fields.\");\n      clearForm();\n      save();\n      render();\n      showMsg(\"Updated.\");\n    });\n\n    $(\"btnClearForm\").addEventListener(\"click\", () =&gt; clearForm());\n\n    $(\"btnBulkParse\").addEventListener(\"click\", () =&gt; {\n      const pairs = parseBulk($(\"bulkInput\").value);\n      if (!pairs.length) return showMsg(\"No pairs detected.\");\n      let added = 0;\n      for (const p of pairs) if (addItem(p.user, p.assistant)) added++;\n      save();\n      render();\n      showMsg(`Imported ${added} example(s).`);\n    });\n\n    $(\"btnBulkClear\").addEventListener(\"click\", () =&gt; ($(\"bulkInput\").value = \"\"));\n\n    $(\"btnExport\").addEventListener(\"click\", () =&gt; {\n      if (!state.items.length) return showMsg(\"No examples to export.\");\n      const out = buildMessagesJSONL();\n      downloadText(`jacai_train_messages_${nowStamp()}.jsonl`, out, \"application\/x-ndjson;charset=utf-8\");\n      showMsg(\"Downloaded JSONL (messages).\");\n    });\n\n    $(\"btnExportRaw\").addEventListener(\"click\", () =&gt; {\n      if (!state.items.length) return showMsg(\"No examples to export.\");\n      const out = buildPromptCompletionJSONL();\n      downloadText(`jacai_train_prompt_completion_${nowStamp()}.jsonl`, out, \"application\/x-ndjson;charset=utf-8\");\n      showMsg(\"Downloaded JSONL (prompt\/completion).\");\n    });\n\n    $(\"btnExportBackup\").addEventListener(\"click\", () =&gt; exportBackupJSON());\n\n    $(\"btnReset\").addEventListener(\"click\", () =&gt; resetAll());\n\n    $(\"btnDeleteSelected\").addEventListener(\"click\", () =&gt; deleteSelectedRows());\n\n    $(\"search\").addEventListener(\"input\", () =&gt; render());\n\n    \/\/ auto-save system prompt &amp; toggles\n    [\"systemPrompt\", \"includeSystemPrompt\", \"prettyJsonl\"].forEach((id) =&gt; {\n      $(id).addEventListener(\"input\", () =&gt; {\n        save();\n        render();\n      });\n      $(id).addEventListener(\"change\", () =&gt; {\n        save();\n        render();\n      });\n    });\n\n    $(\"btnImport\").addEventListener(\"click\", async () =&gt; {\n      const file = $(\"fileImport\").files?.[0];\n      if (!file) return showMsg(\"Choose a file first.\");\n      await importJSONLFile(file);\n      save();\n    });\n  }\n\n  \/\/ init\n  load();\n  $(\"systemPrompt\").value = state.systemPrompt || \"\";\n  $(\"includeSystemPrompt\").checked = state.includeSystemPrompt !== false;\n  $(\"prettyJsonl\").checked = !!state.prettyJsonl;\n  $(\"btnUpdate\").disabled = true;\n\n  bind();\n  render();\n  save();\n})();\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">How to use<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Put these 3 files into a folder, e.g. <code>\/training-builder\/<\/code><\/li>\n\n\n\n<li>Open <code>index.html<\/code> in a browser<\/li>\n\n\n\n<li>Add Q\/A pairs<\/li>\n\n\n\n<li>Click <strong>Download JSONL<\/strong><\/li>\n\n\n\n<li>Upload that JSONL into your model provider dashboard<\/li>\n<\/ol>\n\n\n\n<p>No dependencies.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">explainer video<\/h4>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"666\" style=\"aspect-ratio: 1342 \/ 666;\" width=\"1342\" controls src=\"https:\/\/fixyourowncredit.studio1live.com\/downloads\/wp-content\/uploads\/2026\/02\/jacaitrain1.mp4\"><\/video><\/figure>\n\n\n<h2 class=\"wp-block-post-title\">Train Your Own AI in 20 Minutes: The JacAI Training Builder<\/h2>\n\n\n<p><a href=\"https:\/\/fixyourowncredit.studio1live.com\/downloads\/product\/jacai-training-builder\/\" title=\"\">Support and buy now 5$<\/a>       The video below shows an app I built with ChatGpt and is now a Upstart business. This video will show you how I use the Tool to train my JacAI legal A.I. Coach. <\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"594\" style=\"aspect-ratio: 1302 \/ 594;\" width=\"1302\" controls src=\"https:\/\/fixyourowncredit.studio1live.com\/downloads\/wp-content\/uploads\/2026\/02\/jacaiherovid.mp4\"><\/video><\/figure>\n<\/body>","protected":false},"excerpt":{"rendered":"<p>This Training Builder is the \u201cdataset engine.\u201d Later, JacAI becomes a family of simplified AI agents (legal, content, business, automation). The common thread is the same:<\/p>\n<p>We\u2019re focused on the user relationship with AI \u2014 how to make powerful AI usable for people who aren\u2019t technical.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1251","post","type-post","status-publish","format-standard","hentry","category-uncategorized","entry"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fixyourowncredit.studio1live.com\/downloads\/wp-json\/wp\/v2\/posts\/1251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fixyourowncredit.studio1live.com\/downloads\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fixyourowncredit.studio1live.com\/downloads\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fixyourowncredit.studio1live.com\/downloads\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fixyourowncredit.studio1live.com\/downloads\/wp-json\/wp\/v2\/comments?post=1251"}],"version-history":[{"count":1,"href":"https:\/\/fixyourowncredit.studio1live.com\/downloads\/wp-json\/wp\/v2\/posts\/1251\/revisions"}],"predecessor-version":[{"id":1263,"href":"https:\/\/fixyourowncredit.studio1live.com\/downloads\/wp-json\/wp\/v2\/posts\/1251\/revisions\/1263"}],"wp:attachment":[{"href":"https:\/\/fixyourowncredit.studio1live.com\/downloads\/wp-json\/wp\/v2\/media?parent=1251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fixyourowncredit.studio1live.com\/downloads\/wp-json\/wp\/v2\/categories?post=1251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fixyourowncredit.studio1live.com\/downloads\/wp-json\/wp\/v2\/tags?post=1251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}