--- phase: 01-cleanup-fixes plan: 01 type: execute wave: 1 depends_on: [] files_modified: - public/sitemap.xml - package.json - app/data/site.ts autonomous: true requirements: - FIX-01 - FIX-04 - FIX-05 must_haves: truths: - "public/sitemap.xml no longer exists so @nuxtjs/sitemap serves the dynamic sitemap" - "package.json has no 'latest' or '*' version specs" - "reviewCount in site.ts matches totalReviews in testimonials.ts (both 10)" - "Fiverr placeholder URLs '#' are replaced with the profile URL" artifacts: - path: "package.json" provides: "Pinned vue and vue-router versions" contains: "\"vue\": \"^3.5.0\"" - path: "app/data/site.ts" provides: "Consistent review data and valid Fiverr URLs" contains: "reviewCount: '10'" key_links: - from: "app/data/site.ts" to: "app/data/testimonials.ts" via: "reviewCount must equal totalReviews" pattern: "reviewCount.*10" --- Fix static sitemap conflict, pin dangerous dependency versions, and correct data inconsistencies. Purpose: Eliminate config conflicts and data integrity issues that affect SEO and build reproducibility. Output: Clean package.json, no static sitemap, consistent site data. @$HOME/.claude/get-shit-done/workflows/execute-plan.md @$HOME/.claude/get-shit-done/templates/summary.md @.planning/ROADMAP.md @.planning/STATE.md @.planning/research/PITFALLS.md Task 1: Delete static sitemap and pin dependency versions public/sitemap.xml, package.json public/sitemap.xml, package.json 1. Delete `public/sitemap.xml` entirely. This static file overrides the `@nuxtjs/sitemap` module dynamic route. Nitro serves `public/` files before server routes, so the module handler at `/sitemap.xml` is never reached while this file exists. 2. In `package.json`, replace the two dangerous `"latest"` specs: - Change `"vue": "latest"` to `"vue": "^3.5.0"` - Change `"vue-router": "latest"` to `"vue-router": "^4.5.0"` Do NOT run `pnpm install` -- just update the version specs. The lockfile already has correct resolved versions. bash -c "test ! -f public/sitemap.xml && echo 'sitemap deleted' || echo 'FAIL: sitemap exists'" && grep -c '"latest"' package.json | grep -q '^0$' && echo "no latest found" || echo "FAIL: latest still in package.json" - `public/sitemap.xml` does not exist - `grep '"latest"' package.json` returns zero matches - `grep '"vue": "\\^3.5.0"' package.json` returns a match - `grep '"vue-router": "\\^4.5.0"' package.json` returns a match Static sitemap removed, vue and vue-router pinned to caret ranges Task 2: Fix data inconsistencies in site.ts app/data/site.ts, app/data/testimonials.ts app/data/site.ts In `app/data/site.ts`, fix these inconsistencies: 1. **reviewCount mismatch**: On line ~99, change `reviewCount: '50'` to `reviewCount: '10'`. The testimonials.ts file has `totalReviews: 10` -- these must match. Google penalises inflated aggregateRating claims in structured data. 2. **Fiverr placeholder URLs**: On lines ~61 and ~67, two services have `url: '#'`: - `id: 'telegram-bot'` (line ~61): change `url: '#'` to `url: 'https://www.fiverr.com/users/mr_kayjaydee'` (link to profile since no dedicated gig page exists) - `id: 'website-development'` (line ~67): change `url: '#'` to `url: 'https://www.fiverr.com/users/mr_kayjaydee'` (same fallback) These are the Fiverr profile URL already defined at `fiverr.profileUrl` in the same file. bash -c "grep -q \"reviewCount: '10'\" app/data/site.ts && echo 'reviewCount OK' || echo 'FAIL: reviewCount'" && bash -c "grep -c \"url: '#'\" app/data/site.ts | grep -q '^0$' && echo 'no placeholder URLs' || echo 'FAIL: placeholder URLs remain'" - `grep "reviewCount: '10'" app/data/site.ts` returns a match - `grep "reviewCount: '50'" app/data/site.ts` returns zero matches - `grep "url: '#'" app/data/site.ts` returns zero matches - Both telegram-bot and website-development services have `url: 'https://www.fiverr.com/users/mr_kayjaydee'` reviewCount matches totalReviews (10), Fiverr placeholder URLs replaced with profile URL ## Trust Boundaries | Boundary | Description | |----------|-------------| | Static assets vs server routes | `public/` files override Nitro server handlers | ## STRIDE Threat Register | Threat ID | Category | Component | Disposition | Mitigation Plan | |-----------|----------|-----------|-------------|-----------------| | T-01-01 | Information Disclosure | aggregateRating JSON-LD | mitigate | Set reviewCount to actual value (10) to avoid Google penalty for inflated claims | | T-01-02 | Tampering | package.json "latest" | mitigate | Pin to caret ranges to prevent unvetted major version upgrades | - `ls public/sitemap.xml` fails (file deleted) - `grep '"latest"' package.json` returns 0 matches - `grep "reviewCount: '10'" app/data/site.ts` returns 1 match - `grep "url: '#'" app/data/site.ts` returns 0 matches Static sitemap removed, deps pinned, site data consistent with testimonials data. After completion, create `.planning/phases/01-cleanup-fixes/01-01-SUMMARY.md`