diff --git a/.agents/skills/1-topic-research/SKILL.md b/.agents/skills/1-topic-research/SKILL.md index 1b5d2a47..ad49c98c 100644 --- a/.agents/skills/1-topic-research/SKILL.md +++ b/.agents/skills/1-topic-research/SKILL.md @@ -19,9 +19,9 @@ description: "Phase 1 of the SEO article pipeline: Topic Research & Validation. - The user asks "should I write about X?" or "is this keyword worth targeting?" - Before ANY blog article is drafted — this phase is mandatory -## Context: Applirank & The Content Strategy +## Context: Reqcore & The Content Strategy -**Applirank** is an open-source applicant tracking system (ATS). We are executing a topical authority SEO strategy with ~132 planned articles across 9 clusters (see `TOPICAL-AUTHORITY-MAP.md`). We publish one AI-assisted article per day on `applirank.com/blog`. Content lives in `content/blog/*.md` files using `@nuxt/content` v3. +**Reqcore** is an open-source applicant tracking system (ATS). We are executing a topical authority SEO strategy with ~132 planned articles across 9 clusters (see `TOPICAL-AUTHORITY-MAP.md`). We publish one AI-assisted article per day on `reqcore.com/blog`. Content lives in `content/blog/*.md` files using `@nuxt/content` v3. **Primary audiences:** 1. Technical recruiters & hiring managers evaluating ATS tools @@ -44,7 +44,7 @@ description: "Phase 1 of the SEO article pipeline: Topic Research & Validation. Take the topic from the topical authority map and determine the best **primary keyword** to target. The primary keyword should be: - The most natural, commonly-searched phrasing of this topic -- Relevant to Applirank's audience (recruiters, HR teams, developers, founders) +- Relevant to Reqcore's audience (recruiters, HR teams, developers, founders) - Specific enough to have clear search intent (avoid overly broad terms) **How to validate:** Use `fetch_webpage` to search Google for the candidate keyword. Analyze the top 10 results: @@ -95,7 +95,7 @@ Long-tail pivot (if needed): [alternative keyword] Search the primary keyword and classify intent based on what **dominates page 1**: -| Intent | SERP Signals | Applirank Action | +| Intent | SERP Signals | Reqcore Action | |--------|-------------|------------------| | **Informational** | Guides, explainers, how-tos, Wikipedia, blog posts | Write a blog article (guide, explainer, how-to) | | **Commercial Investigation** | "Best X", comparison posts, review roundups, listicles | Write a blog article (comparison, roundup, listicle) | @@ -224,7 +224,7 @@ Competitor weaknesses: [bulleted list] | Source | How to Use It | Example | |--------|--------------|---------| -| **Builder experience** | Reference real decisions, trade-offs, and code from building Applirank | "When we built our pipeline Kanban board, we found that..." | +| **Builder experience** | Reference real decisions, trade-offs, and code from building Reqcore | "When we built our pipeline Kanban board, we found that..." | | **Review data analysis** | Analyze G2/Capterra review patterns to surface real user pain points | "Across 200+ G2 reviews of [Competitor], 34% mention data export frustration" | | **Contrarian opinion** | Challenge conventional wisdom with evidence | "Most 'best ATS' lists rank by feature count — but features you'll never use are anti-features" | | **Original data / cost analysis** | Calculate real numbers nobody else has published | "We calculated the 3-year total cost for self-hosted vs cloud ATS for a 20-person team" | @@ -305,15 +305,15 @@ Incoming links (existing → new article, for Phase 6): ### Step 7: Business Potential Scoring -**Goal:** Score the topic's alignment with Applirank's business goals. +**Goal:** Score the topic's alignment with Reqcore's business goals. #### 7.1 Scoring Rubric | Score | Criteria | Examples | |-------|----------|---------| -| **3 — High** | Applirank is a natural, irreplaceable solution to the searcher's problem. The article can organically feature Applirank as a recommendation. | ATS comparisons ("Best open-source ATS"), ATS selection guides, deployment tutorials, data ownership articles, self-hosting guides | -| **2 — Medium** | Applirank can be mentioned naturally as one relevant example, but the article isn't *about* Applirank. Brand mention feels authentic but not central. | AI in hiring, recruiting metrics, compliance guides, hiring workflow best practices, vendor lock-in discussions | -| **1 — Low** | Applirank mention would feel forced or tangential. The topic doesn't naturally connect to ATS software. | Generic remote work trends, general career advice, HR leadership philosophy, interview tips for candidates | +| **3 — High** | Reqcore is a natural, irreplaceable solution to the searcher's problem. The article can organically feature Reqcore as a recommendation. | ATS comparisons ("Best open-source ATS"), ATS selection guides, deployment tutorials, data ownership articles, self-hosting guides | +| **2 — Medium** | Reqcore can be mentioned naturally as one relevant example, but the article isn't *about* Reqcore. Brand mention feels authentic but not central. | AI in hiring, recruiting metrics, compliance guides, hiring workflow best practices, vendor lock-in discussions | +| **1 — Low** | Reqcore mention would feel forced or tangential. The topic doesn't naturally connect to ATS software. | Generic remote work trends, general career advice, HR leadership philosophy, interview tips for candidates | #### 7.2 Decision Gate @@ -326,8 +326,8 @@ Incoming links (existing → new article, for Phase 6): **Output for this step:** ``` Business potential: 3 / 2 / 1 -Justification: [How Applirank connects to this topic] -CTA recommendation: [What Applirank CTA fits naturally — e.g., "Try the live demo", "See our transparent AI scoring", "Deploy with Docker in 5 minutes"] +Justification: [How Reqcore connects to this topic] +CTA recommendation: [What Reqcore CTA fits naturally — e.g., "Try the live demo", "See our transparent AI scoring", "Deploy with Docker in 5 minutes"] ``` --- @@ -427,7 +427,7 @@ After completing all 7 steps, compile the results into this structured brief. Th | Field | Value | |-------|-------| | Score | 3 / 2 / 1 | -| Justification | [How Applirank connects] | +| Justification | [How Reqcore connects] | | CTA recommendation | [Natural CTA for this article] | ## 8. Recommended Article Specifications @@ -500,7 +500,7 @@ For original angles based on review data: **Do NOT proceed to Phase 2 if any of these are true:** -1. **Business potential = 1** — The topic has no natural connection to Applirank. Recommend a different topic. +1. **Business potential = 1** — The topic has no natural connection to Reqcore. Recommend a different topic. 2. **High cannibalization with no resolution** — An existing article already targets this keyword and intent, and there's no way to differentiate. Recommend expanding the existing article instead. 3. **No original angles found** — If all top-10 results already cover the topic comprehensively and you cannot identify at least 2 unique angles, the article will be a "me too" post. Recommend a long-tail pivot or different topic. 4. **Transactional intent** — The keyword triggers product/pricing pages, not blog content. Flag for the product team as a landing page opportunity. diff --git a/.agents/skills/2-source-gathering/SKILL.md b/.agents/skills/2-source-gathering/SKILL.md index 2c943dc6..5a306bfc 100644 --- a/.agents/skills/2-source-gathering/SKILL.md +++ b/.agents/skills/2-source-gathering/SKILL.md @@ -64,14 +64,14 @@ Never use full names unless publicly attributed. Use: platform, role, and compan ### Step 3: Builder Experience Notes -**When:** The topic relates to something built or decided in Applirank. -**Skip if:** The topic has no connection to Applirank's technical implementation. +**When:** The topic relates to something built or decided in Reqcore. +**Skip if:** The topic has no connection to Reqcore's technical implementation. Prompt the human with these specific questions: 1. **"What's one technical decision you made related to this topic, and why?"** (e.g., "I chose Drizzle ORM over Prisma because...") 2. **"What problem did you encounter building this, and how did you solve it?"** -3. **"Do you have a number or data point from Applirank's development?"** (processing time, architecture choice, lines of code, deployment metric) +3. **"Do you have a number or data point from Reqcore's development?"** (processing time, architecture choice, lines of code, deployment metric) 4. **"What's one thing you learned building this that most people get wrong?"** 5. **"Do you hold an opinion based on building experience that goes against conventional wisdom?"** @@ -156,7 +156,7 @@ Compile all gathered materials into this structured format. --- -## 3. Builder Experience (Applirank) +## 3. Builder Experience (Reqcore) - [specific experience, decision, or insight relevant to this topic] - [technical detail or data point from development] diff --git a/.agents/skills/4-technical-seo/SKILL.md b/.agents/skills/4-technical-seo/SKILL.md index 7df64f92..3e01b4b3 100644 --- a/.agents/skills/4-technical-seo/SKILL.md +++ b/.agents/skills/4-technical-seo/SKILL.md @@ -39,7 +39,7 @@ Run each check sequentially. Record ✅ (pass), ❌ (fail), or ⚠️ (acceptabl | # | Check | Rule | |---|-------|------| -| 1.1 | Character count | 50–60 chars (account for ` — Applirank` suffix = ~12 extra chars, so frontmatter title should be 50–60 chars) | +| 1.1 | Character count | 50–60 chars (account for ` — Reqcore` suffix = ~12 extra chars, so frontmatter title should be 50–60 chars) | | 1.2 | Keyword position | Primary keyword within the first 5 words | | 1.3 | Modifier present | Includes a compelling modifier: guide, comparison, number, year, checklist, breakdown, etc. | | 1.4 | Differentiation | Does NOT duplicate the phrasing of likely competitor titles found in the Phase 1 brief | @@ -144,13 +144,13 @@ useSchemaOrg([ author: { '@type': 'Person', name: 'Joachim', - url: 'https://applirank.com', + url: 'https://reqcore.com', }, image: post.value.image || '/og-image.png', publisher: { '@type': 'Organization', - name: 'Applirank', - url: 'https://applirank.com', + name: 'Reqcore', + url: 'https://reqcore.com', }, }), ]) diff --git a/.agents/skills/5-review-quality/SKILL.md b/.agents/skills/5-review-quality/SKILL.md index d698935b..540f8231 100644 --- a/.agents/skills/5-review-quality/SKILL.md +++ b/.agents/skills/5-review-quality/SKILL.md @@ -67,7 +67,7 @@ Read the intro aloud. If it sounds like a language model, rewrite it. Identify **2–3 specific locations** (by section heading) where the human must add: -- [ ] A sentence grounded in **builder experience** (building Applirank — architecture decision, tradeoff, lesson learned) +- [ ] A sentence grounded in **builder experience** (building Reqcore — architecture decision, tradeoff, lesson learned) - [ ] A **specific detail only the author would know** (user feedback, support conversation, metric, failed experiment) - [ ] A **genuine opinion** the AI could not have generated (a recommendation, a warning, a preference with reasoning) diff --git a/.agents/skills/seo-skill/SKILL.md b/.agents/skills/seo-skill/SKILL.md index f9da4aa5..38a88cb0 100644 --- a/.agents/skills/seo-skill/SKILL.md +++ b/.agents/skills/seo-skill/SKILL.md @@ -5,7 +5,7 @@ description: Organic SEO optimization for blog articles, landing pages, and publ # SEO Skill — Maximize Organic Search Ranking & AI Visibility -This skill provides actionable rules for writing and optimizing content that ranks at the top of Google Search and gets cited by AI assistants. Every rule is grounded in Google's official documentation, industry-leading SEO research (Ahrefs, Backlinko), and adapted to the Applirank tech stack (`@nuxt/content` v3, `@nuxtjs/seo`, Nuxt 4). +This skill provides actionable rules for writing and optimizing content that ranks at the top of Google Search and gets cited by AI assistants. Every rule is grounded in Google's official documentation, industry-leading SEO research (Ahrefs, Backlinko), and adapted to the Reqcore tech stack (`@nuxt/content` v3, `@nuxtjs/seo`, Nuxt 4). **When to use this skill:** - Writing or reviewing blog articles (`content/blog/*.md`) @@ -20,7 +20,7 @@ This skill provides actionable rules for writing and optimizing content that ran ### 1.1 Target One Primary Keyword Per Article - Every article targets **one** primary keyword (e.g., "self-hosted ATS", "open-source applicant tracking system"). -- The primary keyword should have search volume, be relevant to Applirank's audience (recruiters, HR teams, CTOs), and have realistic ranking difficulty. +- The primary keyword should have search volume, be relevant to Reqcore's audience (recruiters, HR teams, CTOs), and have realistic ranking difficulty. - Use long-tail variants to capture specific search queries (e.g., "self-hosted ATS vs cloud ATS comparison"). ### 1.2 Match Search Intent @@ -31,9 +31,9 @@ Before writing, search the primary keyword on Google and analyze the top 10 resu - Match the **content format** (guide, listicle, comparison, how-to) that dominates page 1 ### 1.3 Business Potential Score -Prioritize topics where Applirank can be naturally mentioned as a solution. Rank topics 1–3: -- **3 (High)**: Applirank is an irreplaceable solution (e.g., "best open-source ATS") -- **2 (Medium)**: Applirank can be mentioned naturally (e.g., "ATS data ownership guide") +Prioritize topics where Reqcore can be naturally mentioned as a solution. Rank topics 1–3: +- **3 (High)**: Reqcore is an irreplaceable solution (e.g., "best open-source ATS") +- **2 (Medium)**: Reqcore can be mentioned naturally (e.g., "ATS data ownership guide") - **1 (Low)**: Tangential topic, brand mention feels forced (e.g., "remote work trends") Focus on topics scoring 2–3. @@ -49,7 +49,7 @@ Every blog post in `content/blog/*.md` MUST include complete frontmatter: title: "Primary Keyword — Compelling Modifier | Brand Context" description: "A 120–155 character meta description that includes the primary keyword, communicates value, and uses active voice." date: 2026-02-22 -author: "Applirank Team" +author: "Reqcore Team" image: "/og-image.png" tags: ["primary-keyword", "related-term-1", "related-term-2", "ats", "recruitment"] --- @@ -62,7 +62,7 @@ tags: ["primary-keyword", "related-term-1", "related-term-2", "ats", "recruitmen | `title` | 50–60 characters. Include primary keyword near the front. Use a compelling modifier (e.g., "Definitive Guide", "Practical Comparison", number). Avoid clickbait. | | `description` | 120–155 characters. Expand on the title with additional value. Include primary keyword. Use active voice. Address the searcher directly. | | `date` | ISO date format (YYYY-MM-DD). Must reflect actual publish or substantial update date. Never backdate for freshness illusion. | -| `author` | Real person name preferred for E-E-A-T. "Applirank Team" acceptable for team-authored content. | +| `author` | Real person name preferred for E-E-A-T. "Reqcore Team" acceptable for team-authored content. | | `image` | Path to a representative OG image. Use article-specific images when possible (minimum 1200×630px). | | `tags` | 3–7 lowercase tags. Include primary keyword, topical category, and 2–3 related terms. | @@ -80,7 +80,7 @@ The title tag is the single most impactful on-page SEO element. It directly infl 5. **Stand out from competitors** — scan SERP titles and differentiate 6. **Use positive emotion** — modifiers like "Practical", "Complete", "Essential" perform well. Avoid "insane", "unbelievable" (clickbait penalty) 7. **Add the current year** only for topics that demand freshness (e.g., "Best ATS 2026") — do NOT put the year in the URL slug -8. **Nuxt title template**: The `nuxt.config.ts` appends ` — Applirank` via `titleTemplate: '%s — Applirank'`. Account for this in total character count (~12 extra chars). Set the title via `useSeoMeta({ title: '...' })`, not `useHead({ title: '...' })` +8. **Nuxt title template**: The `nuxt.config.ts` appends ` — Reqcore` via `titleTemplate: '%s — Reqcore'`. Account for this in total character count (~12 extra chars). Set the title via `useSeoMeta({ title: '...' })`, not `useHead({ title: '...' })` ### Title Formulas That Work - `[Primary Keyword]: [Benefit or Outcome]` → "Self-Hosted ATS: Full Data Ownership Without the SaaS Tax" @@ -121,7 +121,7 @@ URLs are a lightweight ranking factor and a strong user trust signal. 3. **Never include dates in slugs** — content should be updatable without changing the URL 4. **Use lowercase, hyphens only** — no underscores, no uppercase, no special characters 5. **No trailing slashes** in links -6. In Applirank, blog URLs are derived from the filename: `content/blog/self-hosted-vs-cloud-ats.md` → `/blog/self-hosted-vs-cloud-ats` +6. In Reqcore, blog URLs are derived from the filename: `content/blog/self-hosted-vs-cloud-ats.md` → `/blog/self-hosted-vs-cloud-ats` ### Good vs Bad URLs ``` @@ -220,12 +220,12 @@ Google's quality rater guidelines prioritize E-E-A-T. While not a direct ranking - **Author byline** with real name when possible - Link to author bio or about page (currently `/` or a dedicated team page) - Show **first-hand experience**: reference actual product usage, real data, real workflows -- For Applirank content: include screenshots, code snippets, or configuration examples that prove familiarity +- For Reqcore content: include screenshots, code snippets, or configuration examples that prove familiarity - **Cite authoritative sources**: link to Google documentation, industry reports, credible studies ### 8.2 Build Authoritativeness - **Include original data or analysis** — cost comparisons, feature matrices, benchmarks that nobody else has -- **Reference Applirank's own product** as a case study when relevant +- **Reference Reqcore's own product** as a case study when relevant - **Expert quotes** for topics outside direct expertise (e.g., legal compliance, privacy law) - Consistently publish on your core topic (ATS, recruitment, hiring tech) to build topical authority @@ -282,7 +282,7 @@ Google's quality rater guidelines prioritize E-E-A-T. While not a direct ranking ## 11. Structured Data (Schema.org) -Applirank uses `@nuxtjs/seo` which auto-generates schema. Always enhance it. +Reqcore uses `@nuxtjs/seo` which auto-generates schema. Always enhance it. ### 11.1 Blog Articles — Required Schema Every blog article page (`app/pages/blog/[...slug].vue`) must use: @@ -296,14 +296,14 @@ useSchemaOrg([ dateModified: new Date(post.value.date).toISOString(), // Update when content changes author: { '@type': 'Person', - name: post.value.author || 'Applirank Team', - url: 'https://applirank.com', // Link to author page when available + name: post.value.author || 'Reqcore Team', + url: 'https://reqcore.com', // Link to author page when available }, image: post.value.image || '/og-image.png', publisher: { '@type': 'Organization', - name: 'Applirank', - url: 'https://applirank.com', + name: 'Reqcore', + url: 'https://reqcore.com', }, }), ]) @@ -365,7 +365,7 @@ useSeoMeta({ - **Largest Contentful Paint (LCP)** < 2.5s — avoid massive hero images above the fold - **Cumulative Layout Shift (CLS)** < 0.1 — always specify image dimensions - **Interaction to Next Paint (INP)** < 200ms — avoid heavy JS on content pages -- Applirank uses ISR/prerender for public pages — this helps significantly +- Reqcore uses ISR/prerender for public pages — this helps significantly ### 12.5 Route Rules (Already Configured) ```typescript @@ -418,7 +418,7 @@ pulled into a featured snippet.] ## [H2 — Another Major Subtopic] -[Content with internal links to related Applirank pages and external links to +[Content with internal links to related Reqcore pages and external links to authoritative sources.] | Comparison Column A | Column B | @@ -444,12 +444,12 @@ authoritative sources.] ## The Bottom Line -[Summary paragraph. Restate key takeaway. Include CTA mentioning Applirank +[Summary paragraph. Restate key takeaway. Include CTA mentioning Reqcore naturally.] --- -*[Applirank](/) is an open-source applicant tracking system with transparent AI, +*[Reqcore](/) is an open-source applicant tracking system with transparent AI, no per-seat pricing, and full data ownership. [Try the live demo](/auth/sign-in) or explore the [product roadmap](/roadmap).* ``` @@ -477,7 +477,7 @@ Run through this checklist before publishing or updating any blog article: - [ ] Opening answers the core question immediately (featured snippet optimization) ### Links -- [ ] 3–5 internal links to relevant Applirank pages +- [ ] 3–5 internal links to relevant Reqcore pages - [ ] 3–8 external links to authoritative sources - [ ] All links use descriptive anchor text - [ ] No broken links @@ -517,9 +517,9 @@ Run through this checklist before publishing or updating any blog article: --- -## 17. Applirank-Specific Content Topics (High Business Potential) +## 17. Reqcore-Specific Content Topics (High Business Potential) -When choosing blog topics, prioritize these topic clusters where Applirank naturally fits as a solution: +When choosing blog topics, prioritize these topic clusters where Reqcore naturally fits as a solution: ### Cluster 1: ATS Comparison & Selection (Business Potential: 3) - "Best open-source ATS" / "open-source applicant tracking systems" diff --git a/.env.example b/.env.example index bd072241..96d75e24 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,5 @@ # ───────────────────────────────────────────────────────────────────────────── -# Applirank — Environment Variable Reference +# Reqcore — Environment Variable Reference # ───────────────────────────────────────────────────────────────────────────── # Local development: run ./setup.sh — it generates .env automatically. # Production / manual setup: copy this file to .env and fill in the values. @@ -7,14 +7,14 @@ # ─── Database ──────────────────────────────────────────────────────────────── # Used by docker-compose.yml to configure the Postgres container -DB_USER=applirank +DB_USER=reqcore DB_PASSWORD=change-me -DB_NAME=applirank +DB_NAME=reqcore # PostgreSQL connection string (used by host tools: drizzle-kit, drizzle studio) # docker-compose overrides this with the internal Docker hostname for the app. # Railway: ${{Postgres.DATABASE_URL}} -DATABASE_URL=postgresql://applirank:change-me@localhost:5432/applirank +DATABASE_URL=postgresql://reqcore:change-me@localhost:5432/reqcore # ─── Authentication ────────────────────────────────────────────────────────── # Min 32-character random string. Generate with: openssl rand -base64 32 @@ -30,7 +30,7 @@ BETTER_AUTH_URL=http://localhost:3000 # ─── Object Storage (S3-compatible) ────────────────────────────────────────── # Used by docker-compose.yml to configure the MinIO container -STORAGE_USER=applirank +STORAGE_USER=reqcore STORAGE_PASSWORD=change-me # App-level S3 config (used by host tools) @@ -38,9 +38,9 @@ STORAGE_PASSWORD=change-me # Local (MinIO): S3_ENDPOINT=http://localhost:9000, S3_FORCE_PATH_STYLE=true # Railway Bucket: S3_ENDPOINT=${{Bucket.ENDPOINT}}, S3_FORCE_PATH_STYLE=false S3_ENDPOINT=http://localhost:9000 -S3_ACCESS_KEY=applirank +S3_ACCESS_KEY=reqcore S3_SECRET_KEY=change-me -S3_BUCKET=applirank +S3_BUCKET=reqcore S3_REGION=us-east-1 S3_FORCE_PATH_STYLE=true @@ -49,12 +49,12 @@ S3_FORCE_PATH_STYLE=true NUXT_PUBLIC_SITE_URL=http://localhost:3000 # Public URL for the "Upgrade to hosted plan" button in the preview upsell modal -# NUXT_PUBLIC_HOSTED_PLAN_URL=https://applirank.com +# NUXT_PUBLIC_HOSTED_PLAN_URL=https://reqcore.com # ─── Optional: Demo Mode ───────────────────────────────────────────────────── # Set to an org slug to make that org read-only (blocks all mutations) -# Default seeded slug: applirank-demo -# DEMO_ORG_SLUG=applirank-demo +# Default seeded slug: reqcore-demo +# DEMO_ORG_SLUG=reqcore-demo # ─── Optional: Trusted Proxy ───────────────────────────────────────────────── # IP of the reverse proxy (Cloudflare, Railway, nginx). Enables accurate @@ -65,4 +65,4 @@ NUXT_PUBLIC_SITE_URL=http://localhost:3000 # Fine-grained GitHub PAT with Issues:write scope # GITHUB_FEEDBACK_TOKEN=ghp_... # GitHub repo in "owner/repo" format -# GITHUB_FEEDBACK_REPO=applirank/applirank +# GITHUB_FEEDBACK_REPO=reqcore/reqcore diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index a2e0616b..4d817e5a 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,5 +1,5 @@ name: Bug report -description: Report a reproducible defect in Applirank +description: Report a reproducible defect in Reqcore labels: - bug body: diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index cc13184a..bd249bba 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: false contact_links: - name: Security vulnerability report - url: mailto:security@applirank.com + url: mailto:security@reqcore.com about: Please report vulnerabilities privately by email. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 0d74d806..79c71c18 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,5 +1,5 @@ name: Feature request -description: Propose an improvement to Applirank +description: Propose an improvement to Reqcore labels: - enhancement body: @@ -21,7 +21,7 @@ body: id: solution attributes: label: Proposed solution - description: What should Applirank do? + description: What should Reqcore do? placeholder: Add a ... page / API / workflow that ... validations: required: true @@ -46,5 +46,5 @@ body: options: - label: I searched existing issues and did not find a duplicate. required: true - - label: This request aligns with Applirank's ownership/transparency/privacy direction. + - label: This request aligns with Reqcore's ownership/transparency/privacy direction. required: false diff --git a/.github/prompts/master-seo-prompt.prompt.md b/.github/prompts/master-seo-prompt.prompt.md index e0ac3c52..9a6cd2a2 100644 --- a/.github/prompts/master-seo-prompt.prompt.md +++ b/.github/prompts/master-seo-prompt.prompt.md @@ -5,7 +5,7 @@ description: End-to-end SEO article pipeline — runs all 5 phases from topic re # Master SEO Pipeline — Full Article Production -This prompt orchestrates the complete 5-phase SEO article pipeline for Applirank's blog. Each phase uses its dedicated skill file. Execute phases **sequentially** — each phase's output feeds the next. Stop at any phase if its quality gate fails. +This prompt orchestrates the complete 5-phase SEO article pipeline for Reqcore's blog. Each phase uses its dedicated skill file. Execute phases **sequentially** — each phase's output feeds the next. Stop at any phase if its quality gate fails. --- @@ -42,7 +42,7 @@ This prompt orchestrates the complete 5-phase SEO article pipeline for Applirank 4. **Content Gap Analysis** — Fetch and analyze top 5–10 ranking pages; extract PAA questions; identify what competitors miss 5. **Original Angle Identification** — Define 2–3 unique angles from builder experience, review data, contrarian opinions, original data, or technical depth 6. **Internal Link Planning** — Plan 3–5 outgoing links and 2–3 incoming links for topical authority reinforcement -7. **Business Potential Scoring** — Score 1–3 for Applirank alignment; recommend a natural CTA +7. **Business Potential Scoring** — Score 1–3 for Reqcore alignment; recommend a natural CTA ### Output @@ -51,7 +51,7 @@ A structured **Topic Brief** (see the template in the skill file §8). ### Decision Gate **STOP if any of these are true:** -- Business potential = 1 (no natural Applirank connection) +- Business potential = 1 (no natural Reqcore connection) - High cannibalization with no resolution path - Cannot find at least 2 original angles - Transactional or navigational intent (not a blog topic) @@ -114,7 +114,7 @@ When a gate fails, tell the human exactly what's missing and provide the specifi - **Links**: 3–5 internal links (keyword-rich anchor text), 3–8 external links to authoritative sources - **LLM-ready**: Each H2 section stands alone as a citable chunk. Key points are quotable, declarative sentences. Include an FAQ section addressing PAA questions - **No AI voice artifacts**: No "In today's competitive...", "Let's dive in", "It's important to note", "When it comes to...", "Whether you're a X or a Y", "Look no further", "Game-changer", "Comprehensive guide", "Stands out from the crowd" -- **CTA**: End with a natural Applirank mention and CTA from the Topic Brief's business potential assessment +- **CTA**: End with a natural Reqcore mention and CTA from the Topic Brief's business potential assessment ### Frontmatter Requirements @@ -237,5 +237,5 @@ After Phase 5 passes, complete these final steps: - [Topical Authority Map](../../TOPICAL-AUTHORITY-MAP.md) — The 132-article content plan with clusters, phases, and cross-linking rules - [Existing blog content](../../content/blog/) — Published articles for cannibalization checks and internal linking -- [Product Vision](../../PRODUCT.md) — Applirank's UVP, audience, and positioning +- [Product Vision](../../PRODUCT.md) — Reqcore's UVP, audience, and positioning - [Copilot Instructions](../copilot-instructions.md) — Codebase conventions, design system, and project structure \ No newline at end of file diff --git a/.github/workflows/docker-readme-validation.yml b/.github/workflows/docker-readme-validation.yml index 14c7a3d3..527a6491 100644 --- a/.github/workflows/docker-readme-validation.yml +++ b/.github/workflows/docker-readme-validation.yml @@ -100,7 +100,7 @@ jobs: set -euo pipefail echo "Waiting for db..." for i in $(seq 60); do - state="$(docker inspect --format='{{.State.Health.Status}}' applirank_db 2>/dev/null || echo 'not-started')" + state="$(docker inspect --format='{{.State.Health.Status}}' reqcore_db 2>/dev/null || echo 'not-started')" echo " db: $state" [ "$state" = "healthy" ] && break if [ "$i" -eq 60 ]; then @@ -117,7 +117,7 @@ jobs: set -euo pipefail echo "Waiting for minio..." for i in $(seq 60); do - state="$(docker inspect --format='{{.State.Health.Status}}' applirank_minio 2>/dev/null || echo 'not-started')" + state="$(docker inspect --format='{{.State.Health.Status}}' reqcore_minio 2>/dev/null || echo 'not-started')" echo " minio: $state" [ "$state" = "healthy" ] && break if [ "$i" -eq 60 ]; then @@ -138,7 +138,7 @@ jobs: echo "✅ App is reachable on http://localhost:3000" exit 0 fi - state="$(docker inspect --format='{{.State.Status}}' applirank_app 2>/dev/null || echo 'missing')" + state="$(docker inspect --format='{{.State.Status}}' reqcore_app 2>/dev/null || echo 'missing')" if [ "$state" = "exited" ] || [ "$state" = "dead" ]; then echo "❌ App container exited unexpectedly" docker compose logs app --tail=100 @@ -165,7 +165,7 @@ jobs: - name: Assert S3 bucket is ready run: | set -euo pipefail - if ! docker compose logs app | grep -q 'S3 bucket "applirank" is ready'; then + if ! docker compose logs app | grep -q 'S3 bucket "reqcore" is ready'; then echo "❌ S3 bucket ready message not found in app logs" docker compose logs app exit 1 @@ -217,7 +217,7 @@ jobs: set -euo pipefail response="$(curl -s -X POST http://localhost:3000/api/auth/sign-in/email \ -H "Content-Type: application/json" \ - -d '{"email":"demo@applirank.com","password":"demo1234"}' \ + -d '{"email":"demo@reqcore.com","password":"demo1234"}' \ -w "\n%{http_code}")" body="$(echo "$response" | head -n -1)" status="$(echo "$response" | tail -n 1)" @@ -227,7 +227,7 @@ jobs: echo "❌ Sign-in failed — expected 200, got $status" exit 1 fi - if ! echo "$body" | grep -q "demo@applirank.com"; then + if ! echo "$body" | grep -q "demo@reqcore.com"; then echo "❌ Response body does not contain expected email" exit 1 fi diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 67a8c1d2..359c4063 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -1,8 +1,8 @@ -# Applirank — System Architecture +# Reqcore — System Architecture ## Overview -Applirank is a **Nuxt 4** full-stack application following a monolithic architecture with clear separation between client (`app/`) and server (`server/`) code. The system supports both **managed deployment** on Railway and **self-hosted deployment** via Docker Compose. +Reqcore is a **Nuxt 4** full-stack application following a monolithic architecture with clear separation between client (`app/`) and server (`server/`) code. The system supports both **managed deployment** on Railway and **self-hosted deployment** via Docker Compose. ## Technology Stack @@ -26,7 +26,7 @@ Applirank is a **Nuxt 4** full-stack application following a monolithic architec ## Directory Structure ``` -applirank/ +reqcore/ ├── app/ # Client source (Nuxt 4 srcDir) │ ├── app.vue # Root component │ ├── assets/ @@ -222,7 +222,7 @@ Public-facing endpoints live under `server/api/public/` and require no authentic ### 10. SEO & Structured Data -Applirank uses `@nuxtjs/seo` for comprehensive search engine optimization: +Reqcore uses `@nuxtjs/seo` for comprehensive search engine optimization: | Feature | Implementation | |---------|---------------| @@ -262,7 +262,7 @@ Blog articles are Markdown files in `content/blog/` powered by `@nuxt/content` v | Environment secrets | Validated at startup, never exposed to client | ## Deployment Architecture -Applirank runs on **Railway** with **Cloudflare** as CDN/DNS: +Reqcore runs on **Railway** with **Cloudflare** as CDN/DNS: | Component | Role | |-----------|------| @@ -295,7 +295,7 @@ Variables are configured in the Railway dashboard or via `railway variables`. Se | `S3_REGION` | `${{Bucket.REGION}}` | | `S3_FORCE_PATH_STYLE` | `false` | | `BETTER_AUTH_SECRET` | Manual (sealed) | -| `BETTER_AUTH_URL` | Production: `https://applirank.com` · PR/preview: `https://${{RAILWAY_PUBLIC_DOMAIN}}` | +| `BETTER_AUTH_URL` | Production: `https://reqcore.com` · PR/preview: `https://${{RAILWAY_PUBLIC_DOMAIN}}` | For zero manual PR setup, define `BETTER_AUTH_URL` as `https://${{RAILWAY_PUBLIC_DOMAIN}}` in your Railway preview/PR environment (or shared variables scoped to previews). ## Local Development Services diff --git a/CHANGELOG.md b/CHANGELOG.md index 429f144c..ca64d08a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -All notable changes to Applirank are documented here, organized by date. +All notable changes to Reqcore are documented here, organized by date. Format follows [Keep a Changelog](https://keepachangelog.com). Categories: **Added**, **Changed**, **Fixed**, **Removed**. @@ -20,7 +20,7 @@ Format follows [Keep a Changelog](https://keepachangelog.com). Categories: **Add ### Changed - **Unified Railway seeding path** — Railway predeploy now runs `db:seed` (same script as standard demo data), removing PR-specific seed divergence between preview and production-like environments -- **Preview demo defaults aligned** — runtime preview fallbacks now target `applirank-demo` and `demo@applirank.com` to match `server/scripts/seed.ts` +- **Preview demo defaults aligned** — runtime preview fallbacks now target `reqcore-demo` and `demo@reqcore.com` to match `server/scripts/seed.ts` ### Removed @@ -40,7 +40,7 @@ Format follows [Keep a Changelog](https://keepachangelog.com). Categories: **Add ### Changed - **Lockfile hygiene** — refreshed dependency graph with `npm install` + `npm dedupe` to remove stale vulnerable transitive entries -- **Demo env guidance** — `.env.example` demo slug example now matches seeded demo organization slug (`applirank-demo`) to reduce configuration drift +- **Demo env guidance** — `.env.example` demo slug example now matches seeded demo organization slug (`reqcore-demo`) to reduce configuration drift --- diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 8939111d..7b2447c3 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -36,7 +36,7 @@ This Code of Conduct applies within all community spaces, and also applies when ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at security@applirank.com. +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at security@reqcore.com. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d67e29bb..16e02484 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ -# Contributing to Applirank +# Contributing to Reqcore -Thanks for contributing to Applirank. +Thanks for contributing to Reqcore. ## Before You Start @@ -11,8 +11,8 @@ Thanks for contributing to Applirank. ## Development Setup ```bash -git clone https://github.com/applirank/applirank.git -cd applirank +git clone https://github.com/reqcore/reqcore.git +cd reqcore cp .env.example .env docker compose up -d npm install @@ -28,7 +28,7 @@ npm run dev ### DCO Sign-off (Required) -Applirank uses the Developer Certificate of Origin (DCO) instead of a CLA. +Reqcore uses the Developer Certificate of Origin (DCO) instead of a CLA. Sign every commit with: diff --git a/Dockerfile b/Dockerfile index b4950805..9e84a35e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,7 +21,7 @@ WORKDIR /app ENV NODE_ENV=production -RUN addgroup -S applirank && adduser -S applirank -G applirank +RUN addgroup -S reqcore && adduser -S reqcore -G reqcore # .output is fully self-contained (includes content DB, server, public assets) COPY --from=builder /app/.output ./.output @@ -37,8 +37,8 @@ COPY --from=builder /app/drizzle.config.ts ./drizzle.config.ts COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/server ./server -RUN chown -R applirank:applirank /app -USER applirank +RUN chown -R reqcore:reqcore /app +USER reqcore EXPOSE 3000 diff --git a/PRODUCT.md b/PRODUCT.md index 9a9e78d9..3790ba00 100644 --- a/PRODUCT.md +++ b/PRODUCT.md @@ -1,8 +1,8 @@ -# Applirank — Product Vision & Goals +# Reqcore — Product Vision & Goals ## The Sovereign Recruitment Engine -Applirank is a lean, open-source Applicant Tracking System (ATS) designed to return power to the employer. We are the **"Glass Box"** alternative to the **"Black Box"** incumbents. +Reqcore is a lean, open-source Applicant Tracking System (ATS) designed to return power to the employer. We are the **"Glass Box"** alternative to the **"Black Box"** incumbents. ## Problem Statement @@ -21,10 +21,10 @@ You *own* the infrastructure (Postgres + MinIO). Your talent pool is a permanent We reject "Secret Algorithms." When AI ranks a candidate, it **must** provide a visible **Matching Logic** summary so recruiters can verify the result. Every AI decision is explainable and auditable. ### 3. The Anti-Growth Tax -No per-seat pricing. Applirank is designed to let companies scale their hiring teams without increasing their software bill. +No per-seat pricing. Reqcore is designed to let companies scale their hiring teams without increasing their software bill. ### 4. Privacy Sovereignty -By supporting local-first storage (MinIO) and local AI models (Ollama), Applirank is the only ATS where sensitive candidate PII never has to leave the company's private network. +By supporting local-first storage (MinIO) and local AI models (Ollama), Reqcore is the only ATS where sensitive candidate PII never has to leave the company's private network. ## Target Users @@ -55,7 +55,7 @@ By supporting local-first storage (MinIO) and local AI models (Ollama), Appliran ### Phase 3 — Collaboration - [ ] Team comments and notes on candidates - [ ] Interview scheduling -- [ ] Email integration (send/receive from within Applirank) +- [ ] Email integration (send/receive from within Reqcore) - [ ] Candidate portal (self-service application status) ## Design Principles diff --git a/README.md b/README.md index 0437f273..1f39f5d6 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@
-# Applirank +# Reqcore **The open-source ATS you own. No per-seat fees. No data lock-in. No secret algorithms.** -[Live Demo](https://demo.applirank.com) · [Documentation](ARCHITECTURE.md) · [Roadmap](ROADMAP.md) · [Report Bug](https://github.com/applirank/applirank/issues/new) +[Live Demo](https://demo.reqcore.com) · [Documentation](ARCHITECTURE.md) · [Roadmap](ROADMAP.md) · [Report Bug](https://github.com/reqcore/reqcore/issues/new) [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](LICENSE) @@ -12,11 +12,11 @@ --- -Most recruiting software holds your candidate data hostage behind per-seat pricing and opaque algorithms. Applirank is different — it runs on **your** infrastructure, your team scales without increasing your software bill, and when AI ranks a candidate, it shows you exactly why. +Most recruiting software holds your candidate data hostage behind per-seat pricing and opaque algorithms. Reqcore is different — it runs on **your** infrastructure, your team scales without increasing your software bill, and when AI ranks a candidate, it shows you exactly why. -## Why Applirank? +## Why Reqcore? -| | **Applirank** | Greenhouse | Lever | Ashby | OpenCATS | +| | **Reqcore** | Greenhouse | Lever | Ashby | OpenCATS | |---|:---:|:---:|:---:|:---:|:---:| | **Open source** | ✅ | ❌ | ❌ | ❌ | ✅ | | **Self-hosted** | ✅ | ❌ | ❌ | ❌ | ✅ | @@ -70,16 +70,16 @@ You should see something like `Docker version 27.x.x`. If you get `command not f --- -### Step 2 — Download Applirank +### Step 2 — Download Reqcore Clone the repository (this downloads the source code): ```bash -git clone https://github.com/applirank/applirank.git -cd applirank +git clone https://github.com/reqcore/reqcore.git +cd reqcore ``` -> Don't have `git`? [Download it here](https://git-scm.com/downloads), or [download a ZIP](https://github.com/applirank/applirank/archive/refs/heads/main.zip) and unzip it manually. +> Don't have `git`? [Download it here](https://git-scm.com/downloads), or [download a ZIP](https://github.com/reqcore/reqcore/archive/refs/heads/main.zip) and unzip it manually. --- @@ -115,7 +115,7 @@ app | Listening on http://[::]:3000 --- -### Step 5 — Open Applirank +### Step 5 — Open Reqcore Go to **[http://localhost:3000](http://localhost:3000)** in your browser. @@ -132,7 +132,7 @@ docker compose exec app npm run db:seed ``` Then sign in with: -- **Email:** `demo@applirank.com` +- **Email:** `demo@reqcore.com` - **Password:** `demo1234` --- @@ -159,7 +159,7 @@ docker compose down -v | Service | URL | Description | |---------|-----|-------------| -| **App** | [localhost:3000](http://localhost:3000) | The Applirank web UI | +| **App** | [localhost:3000](http://localhost:3000) | The Reqcore web UI | | **MinIO Console** | [localhost:9001](http://localhost:9001) | File storage browser (S3-compatible) | | **Adminer** | [localhost:8080](http://localhost:8080) | Database browser — only with `--profile tools` | @@ -218,7 +218,7 @@ setup.sh # One-time secret generator → writes .env ## Deployment -Applirank is designed to run on a single VPS. The reference deployment uses: +Reqcore is designed to run on a single VPS. The reference deployment uses: | Component | Role | |-----------|------| @@ -249,7 +249,7 @@ See [ARCHITECTURE.md](ARCHITECTURE.md) for the full deployment architecture diag ## Roadmap -Applirank is actively developed. Here's what's next: +Reqcore is actively developed. Here's what's next: | Status | Milestone | |--------|-----------| @@ -261,7 +261,7 @@ See the full [Roadmap](ROADMAP.md) and [Product Vision](PRODUCT.md). ## Contributing -Applirank is in early development and contributions are welcome. Check [CONTRIBUTING.md](CONTRIBUTING.md) for development workflow, DCO sign-off requirements, and submission guidelines. +Reqcore is in early development and contributions are welcome. Check [CONTRIBUTING.md](CONTRIBUTING.md) for development workflow, DCO sign-off requirements, and submission guidelines. ## License diff --git a/ROADMAP.md b/ROADMAP.md index e0ff2928..f0e7f438 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,4 +1,4 @@ -# Applirank — Roadmap +# Reqcore — Roadmap > Last updated: 2026-02-15 (public roadmap page) > diff --git a/SECURITY.md b/SECURITY.md index d861043c..f236dd56 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,7 +2,7 @@ ## Supported Versions -Applirank is under active development on the `main` branch. +Reqcore is under active development on the `main` branch. - `main`: Supported - Tagged releases: Security support windows are defined per release once stable releases begin. @@ -11,7 +11,7 @@ Applirank is under active development on the `main` branch. Please do **not** report security vulnerabilities through public GitHub issues. -Report privately by email: security@applirank.com +Report privately by email: security@reqcore.com Include as much detail as possible: @@ -29,7 +29,7 @@ Include as much detail as possible: ## Scope Priorities -Given Applirank's architecture, the highest-priority findings include: +Given Reqcore's architecture, the highest-priority findings include: - Multi-tenant data isolation bypass (`organizationId` scope issues) - Authentication or authorization bypass diff --git a/TOPICAL-AUTHORITY-MAP.md b/TOPICAL-AUTHORITY-MAP.md index faa5fff9..9bc5c590 100644 --- a/TOPICAL-AUTHORITY-MAP.md +++ b/TOPICAL-AUTHORITY-MAP.md @@ -38,7 +38,7 @@ All articles must follow the SEO Skill ([`.agents/skills/seo-skill/SKILL.md`](.a - **Supporting articles:** 1,200–2,000 words, links to pillar + 2–3 siblings. - Every article must include at least one of: original screenshot, data point, code snippet, decision framework, or template. - No filler paragraphs — every section teaches something specific. -- First-person experience from building Applirank wherever relevant (E-E-A-T). +- First-person experience from building Reqcore wherever relevant (E-E-A-T). - Answer the query in the first 100 words (featured snippet + AI Overview optimization). - Apply the full [SEO Quality Checklist](.agents/skills/seo-skill/SKILL.md) §15 before publishing. - Update every pillar page quarterly (freshness signal). @@ -81,7 +81,7 @@ All articles must follow the SEO Skill ([`.agents/skills/seo-skill/SKILL.md`](.a - [ ] Zoho Recruit vs open source ATS: ecosystem comparison 🟢 - [ ] iCIMS vs open source ATS: legacy vs modern 🟢 - [ ] SmartRecruiters vs open source ATS: enterprise vs DIY 🟢 -- [ ] OpenCATS vs Applirank: open source ATS head-to-head 🟢 +- [ ] OpenCATS vs Reqcore: open source ATS head-to-head 🟢 **Supporting — Decision frameworks:** - [ ] ATS features that actually matter (and which are bloat) 🟢 @@ -119,11 +119,11 @@ All articles must follow the SEO Skill ([`.agents/skills/seo-skill/SKILL.md`](.a ## Phase 2: Differentiation (Weeks 5–8) -> These are Applirank's moat. No competitor covers transparent AI scoring or self-hosted data ownership with this depth. +> These are Reqcore's moat. No competitor covers transparent AI scoring or self-hosted data ownership with this depth. ### Cluster 3: AI & Automation in Your ATS (Differentiation Cluster) — 17 articles -> Where Applirank's transparent AI positioning shines. High interest, under-served by competitors. +> Where Reqcore's transparent AI positioning shines. High interest, under-served by competitors. **Pillar:** - [ ] How AI works in modern applicant tracking systems (the honest guide) 🔵 @@ -307,7 +307,7 @@ All articles must follow the SEO Skill ([`.agents/skills/seo-skill/SKILL.md`](.a ### Cluster 9: Migration & Switching ATS (Action Cluster) — 9 articles -> Pure conversion content. People searching these are ready to switch. Tightest path to Applirank adoption. +> Pure conversion content. People searching these are ready to switch. Tightest path to Reqcore adoption. **Pillar:** - [ ] How to switch your ATS without losing data or momentum 🔴 diff --git a/app/assets/css/main.css b/app/assets/css/main.css index 41f3f8e4..8205bd20 100644 --- a/app/assets/css/main.css +++ b/app/assets/css/main.css @@ -2,7 +2,7 @@ @plugin "@tailwindcss/typography"; /* ───────────────────────────────────────────────────────── - Applirank — Design System + Reqcore — Design System Modern, professional palette for a sovereignty-first ATS. Built on Tailwind CSS v4 @theme — no tailwind.config.js. See: https://tailwindcss.com/docs/theme diff --git a/app/components/AppSidebar.vue b/app/components/AppSidebar.vue index 603f53a5..3a96638c 100644 --- a/app/components/AppSidebar.vue +++ b/app/components/AppSidebar.vue @@ -85,7 +85,7 @@ function isActiveTab(to: string, exact: boolean) {
-
Applirank
+
Reqcore
diff --git a/app/components/FeedbackModal.vue b/app/components/FeedbackModal.vue index c88e90e0..bb876519 100644 --- a/app/components/FeedbackModal.vue +++ b/app/components/FeedbackModal.vue @@ -250,7 +250,7 @@ function resetAndClose() { Feedback submitted!

- Thank you for helping improve Applirank. Your feedback has been recorded. + Thank you for helping improve Reqcore. Your feedback has been recorded.

- Submitting this form creates a GitHub issue for the Applirank maintainers. + Submitting this form creates a GitHub issue for the Reqcore maintainers.
@@ -431,7 +431,7 @@ function resetAndClose() { v-model="featureDesiredWorkflow" rows="2" maxlength="1000" - placeholder="How should this work in Applirank?" + placeholder="How should this work in Reqcore?" class="w-full rounded-lg border border-surface-200 dark:border-surface-700 bg-white dark:bg-surface-800 px-3 py-2 text-sm text-surface-900 dark:text-surface-100 placeholder:text-surface-400 focus:outline-none focus:ring-2 focus:ring-brand-500 focus:border-brand-500 transition-colors resize-y" />
diff --git a/app/components/GiscusComments.vue b/app/components/GiscusComments.vue index c9930b97..a14b98b9 100644 --- a/app/components/GiscusComments.vue +++ b/app/components/GiscusComments.vue @@ -21,7 +21,7 @@ function loadGiscus() { const script = document.createElement('script') script.src = 'https://giscus.app/client.js' - script.setAttribute('data-repo', 'applirank/applirank') + script.setAttribute('data-repo', 'reqcore/reqcore') script.setAttribute('data-repo-id', runtimeConfig.public.giscusRepoId) script.setAttribute('data-category', 'Feature Catalog') script.setAttribute('data-category-id', runtimeConfig.public.giscusCategoryId) diff --git a/app/components/PreviewUpsellModal.vue b/app/components/PreviewUpsellModal.vue index 9357ec29..8abd2794 100644 --- a/app/components/PreviewUpsellModal.vue +++ b/app/components/PreviewUpsellModal.vue @@ -39,7 +39,7 @@ function closeModal() {

- Want write access? Upgrade to a paid hosted plan or deploy your own Applirank instance. + Want write access? Upgrade to a paid hosted plan or deploy your own Reqcore instance.

@@ -54,7 +54,7 @@ function closeModal() { ` for Tailwind's dark variant. * @@ -25,7 +25,7 @@ export function useColorMode() { colorMode.value = colorMode.value === 'dark' ? 'light' : 'dark' applyClass() if (import.meta.client) { - localStorage.setItem('applirank-color-mode', colorMode.value) + localStorage.setItem('reqcore-color-mode', colorMode.value) } } @@ -34,14 +34,14 @@ export function useColorMode() { colorMode.value = mode applyClass() if (import.meta.client) { - localStorage.setItem('applirank-color-mode', mode) + localStorage.setItem('reqcore-color-mode', mode) } } // Read from localStorage on mount (client only) if (import.meta.client) { onMounted(() => { - const stored = localStorage.getItem('applirank-color-mode') as 'light' | 'dark' | null + const stored = localStorage.getItem('reqcore-color-mode') as 'light' | 'dark' | null if (stored) { colorMode.value = stored } else if (window.matchMedia('(prefers-color-scheme: dark)').matches) { diff --git a/app/layouts/auth.vue b/app/layouts/auth.vue index d89c67c8..1c7ca318 100644 --- a/app/layouts/auth.vue +++ b/app/layouts/auth.vue @@ -2,7 +2,7 @@
-

Applirank

+

Reqcore

The Sovereign Recruitment Engine

diff --git a/app/layouts/dashboard.vue b/app/layouts/dashboard.vue index b2b1881c..69bbe159 100644 --- a/app/layouts/dashboard.vue +++ b/app/layouts/dashboard.vue @@ -28,7 +28,7 @@ const isDemo = computed(() => { Preview mode — You're exploring with sample data in read-only mode. Changes are disabled.
- Applirank + Reqcore
@@ -18,7 +18,7 @@

- Powered by Applirank + Powered by Reqcore

diff --git a/app/pages/auth/sign-in.vue b/app/pages/auth/sign-in.vue index 40ce6dd3..59e26b88 100644 --- a/app/pages/auth/sign-in.vue +++ b/app/pages/auth/sign-in.vue @@ -5,8 +5,8 @@ definePageMeta({ }) useSeoMeta({ - title: 'Sign In — Applirank', - description: 'Sign in to your Applirank account', + title: 'Sign In — Reqcore', + description: 'Sign in to your Reqcore account', robots: 'noindex, nofollow', }) diff --git a/app/pages/auth/sign-up.vue b/app/pages/auth/sign-up.vue index db655bc2..5fe89610 100644 --- a/app/pages/auth/sign-up.vue +++ b/app/pages/auth/sign-up.vue @@ -5,8 +5,8 @@ definePageMeta({ }) useSeoMeta({ - title: 'Sign Up — Applirank', - description: 'Create your Applirank account', + title: 'Sign Up — Reqcore', + description: 'Create your Reqcore account', robots: 'noindex, nofollow', }) diff --git a/app/pages/blog/[...slug].vue b/app/pages/blog/[...slug].vue index a9a7a2ce..fc697d7f 100644 --- a/app/pages/blog/[...slug].vue +++ b/app/pages/blog/[...slug].vue @@ -42,8 +42,8 @@ useSchemaOrg([ image: post.value.image || '/og-image.png', publisher: { '@type': 'Organization', - name: 'Applirank', - url: 'https://applirank.com', + name: 'Reqcore', + url: 'https://reqcore.com', }, }), ]) @@ -64,13 +64,13 @@ const { data: session } = await authClient.useSession(useFetch) class="fixed inset-x-0 top-0 z-50 border-b border-white/[0.06] bg-[#09090b]/80 backdrop-blur-xl" >
- Applirank + Reqcore
Roadmap Features Blog @@ -142,7 +142,7 @@ const { data: session } = await authClient.useSession(useFetch) >

Ready to own your hiring?

- Applirank is the open-source ATS you can self-host. Transparent AI, no per-seat fees, full data ownership. + Reqcore is the open-source ATS you can self-host. Transparent AI, no per-seat fees, full data ownership.