← back to Homesonspec
auto-save: 2026-07-27T18:53:10 (95 files) — .env.example README.md apps/admin/next.config.ts apps/admin/package.json apps/admin/src/app/api/review/route.ts
63efe789169437babd2ae669e98e44447b38932e · 2026-07-27 18:53:18 -0700 · Steve Abrams
Files touched
M .env.exampleM README.mdM apps/admin/next.config.tsM apps/admin/package.jsonM apps/admin/src/app/api/review/route.tsM apps/admin/src/app/corrections/page.tsxM apps/admin/src/app/layout.tsxM apps/admin/src/app/leads/page.tsxM apps/admin/src/app/page.tsxM apps/admin/src/app/review/page.tsxM apps/admin/src/app/snapshots/page.tsxM apps/admin/src/app/sources/page.tsxM apps/admin/src/app/validation/page.tsxM apps/admin/src/middleware.tsM apps/admin/tsconfig.jsonM apps/web/next.config.tsM apps/web/package.jsonM apps/web/src/app/HeroMap.tsxM apps/web/src/app/[state]/[city]/page.tsxM apps/web/src/app/api/corrections/route.tsM apps/web/src/app/api/facets/route.tsM apps/web/src/app/api/leads/route.tsM apps/web/src/app/api/map/route.tsM apps/web/src/app/api/search/route.tsM apps/web/src/app/builders/[slug]/page.tsxM apps/web/src/app/builders/page.tsxM apps/web/src/app/communities/[slug]/page.tsxM apps/web/src/app/compare/page.tsxM apps/web/src/app/contact/page.tsxM apps/web/src/app/homes/[id]/page.tsxM apps/web/src/app/map/MapExplorer.tsxM apps/web/src/app/page.tsxM apps/web/src/app/plans/[id]/page.tsxM apps/web/src/app/saved/page.tsxM apps/web/src/app/search/SearchClient.tsxM apps/web/src/lib/parse-search.tsM apps/web/tsconfig.jsonM apps/workers/package.jsonM apps/workers/src/cli.tsM apps/workers/src/index.tsM apps/workers/src/pipeline.itest.tsM apps/workers/src/pipeline.tsM apps/workers/src/verify-cli.tsM apps/workers/src/verify.tsM apps/workers/vitest.integration.setup.tsM cert-homesonspec.shM collectors/BUILDERS.mdM collectors/common/package.jsonM collectors/common/src/adapter.tsM collectors/dr-horton/package.jsonM collectors/dr-horton/src/index.tsM collectors/dream-finders/package.jsonM collectors/dream-finders/src/index.tsM collectors/kb-home/package.jsonM collectors/kb-home/src/index.tsM collectors/lennar/package.jsonM collectors/lennar/src/index.tsM collectors/meridian-homes/package.jsonM collectors/meridian-homes/src/extract.test.tsM collectors/meridian-homes/src/index.tsM collectors/pulte/package.jsonM collectors/pulte/src/index.tsM collectors/taylor-morrison/package.jsonM collectors/taylor-morrison/src/index.tsM collectors/toll-brothers/package.jsonM collectors/toll-brothers/src/index.tsM collectors/tri-pointe/package.jsonM collectors/tri-pointe/src/index.tsM deploy-full.shM deploy-heromap.shM deploy-web.shM docs/architecture/ADRS.mdM docs/data-rights/POLICY.mdM docs/source-runbooks/meridian-homes.mdM docs/source-runbooks/toll-brothers.mdM ecosystem.config.jsM package.jsonM packages/database/package.jsonM packages/database/prisma/schema.prismaM packages/database/prisma/seed.tsM packages/publisher/package.jsonM packages/publisher/src/index.tsM packages/schemas/package.jsonM packages/search/package.jsonM packages/search/src/index.tsM packages/shared-ui/package.jsonM packages/shared-ui/src/index.tsM packages/shared/package.jsonM packages/source-registry/package.jsonM packages/validation/package.jsonM packages/validation/src/rules.tsM packages/validation/src/types.tsM playwright.config.tsM pnpm-lock.yamlM tsconfig.base.json
Diff
commit 63efe789169437babd2ae669e98e44447b38932e
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Jul 27 18:53:18 2026 -0700
auto-save: 2026-07-27T18:53:10 (95 files) — .env.example README.md apps/admin/next.config.ts apps/admin/package.json apps/admin/src/app/api/review/route.ts
---
.env.example | 4 +-
README.md | 8 +-
apps/admin/next.config.ts | 12 +--
apps/admin/package.json | 14 +--
apps/admin/src/app/api/review/route.ts | 4 +-
apps/admin/src/app/corrections/page.tsx | 4 +-
apps/admin/src/app/layout.tsx | 4 +-
apps/admin/src/app/leads/page.tsx | 4 +-
apps/admin/src/app/page.tsx | 4 +-
apps/admin/src/app/review/page.tsx | 4 +-
apps/admin/src/app/snapshots/page.tsx | 4 +-
apps/admin/src/app/sources/page.tsx | 4 +-
apps/admin/src/app/validation/page.tsx | 4 +-
apps/admin/src/middleware.ts | 2 +-
apps/admin/tsconfig.json | 12 +--
apps/web/next.config.ts | 12 +--
apps/web/package.json | 12 +--
apps/web/src/app/HeroMap.tsx | 4 +-
apps/web/src/app/[state]/[city]/page.tsx | 4 +-
apps/web/src/app/api/corrections/route.ts | 2 +-
apps/web/src/app/api/facets/route.ts | 2 +-
apps/web/src/app/api/leads/route.ts | 2 +-
apps/web/src/app/api/map/route.ts | 2 +-
apps/web/src/app/api/search/route.ts | 2 +-
apps/web/src/app/builders/[slug]/page.tsx | 4 +-
apps/web/src/app/builders/page.tsx | 2 +-
apps/web/src/app/communities/[slug]/page.tsx | 4 +-
apps/web/src/app/compare/page.tsx | 4 +-
apps/web/src/app/contact/page.tsx | 2 +-
apps/web/src/app/homes/[id]/page.tsx | 4 +-
apps/web/src/app/map/MapExplorer.tsx | 2 +-
apps/web/src/app/page.tsx | 2 +-
apps/web/src/app/plans/[id]/page.tsx | 4 +-
apps/web/src/app/saved/page.tsx | 2 +-
apps/web/src/app/search/SearchClient.tsx | 12 +--
apps/web/src/lib/parse-search.ts | 2 +-
apps/web/tsconfig.json | 12 +--
apps/workers/package.json | 30 +++----
apps/workers/src/cli.ts | 20 ++---
apps/workers/src/index.ts | 4 +-
apps/workers/src/pipeline.itest.ts | 10 +--
apps/workers/src/pipeline.ts | 12 +--
apps/workers/src/verify-cli.ts | 14 +--
apps/workers/src/verify.ts | 2 +-
apps/workers/vitest.integration.setup.ts | 6 +-
cert-homesonspec.sh | 2 +-
collectors/BUILDERS.md | 2 +-
collectors/common/package.json | 4 +-
collectors/common/src/adapter.ts | 2 +-
collectors/dr-horton/package.json | 8 +-
collectors/dr-horton/src/index.ts | 4 +-
collectors/dream-finders/package.json | 8 +-
collectors/dream-finders/src/index.ts | 6 +-
collectors/kb-home/package.json | 8 +-
collectors/kb-home/src/index.ts | 4 +-
collectors/lennar/package.json | 8 +-
collectors/lennar/src/index.ts | 6 +-
collectors/meridian-homes/package.json | 4 +-
collectors/meridian-homes/src/extract.test.ts | 2 +-
collectors/meridian-homes/src/index.ts | 4 +-
collectors/pulte/package.json | 8 +-
collectors/pulte/src/index.ts | 4 +-
collectors/taylor-morrison/package.json | 8 +-
collectors/taylor-morrison/src/index.ts | 4 +-
collectors/toll-brothers/package.json | 8 +-
collectors/toll-brothers/src/index.ts | 6 +-
collectors/tri-pointe/package.json | 8 +-
collectors/tri-pointe/src/index.ts | 4 +-
deploy-full.sh | 32 +++----
deploy-heromap.sh | 12 +--
deploy-web.sh | 10 +--
docs/architecture/ADRS.md | 2 +-
docs/data-rights/POLICY.md | 2 +-
docs/source-runbooks/meridian-homes.md | 2 +-
docs/source-runbooks/toll-brothers.md | 2 +-
ecosystem.config.js | 10 +--
package.json | 20 ++---
packages/database/package.json | 2 +-
packages/database/prisma/schema.prisma | 2 +-
packages/database/prisma/seed.ts | 2 +-
packages/publisher/package.json | 6 +-
packages/publisher/src/index.ts | 4 +-
packages/schemas/package.json | 2 +-
packages/search/package.json | 4 +-
packages/search/src/index.ts | 4 +-
packages/shared-ui/package.json | 2 +-
packages/shared-ui/src/index.ts | 2 +-
packages/shared/package.json | 2 +-
packages/source-registry/package.json | 4 +-
packages/validation/package.json | 4 +-
packages/validation/src/rules.ts | 4 +-
packages/validation/src/types.ts | 2 +-
playwright.config.ts | 4 +-
pnpm-lock.yaml | 124 +++++++++++++-------------
tsconfig.base.json | 18 ++--
95 files changed, 345 insertions(+), 345 deletions(-)
diff --git a/.env.example b/.env.example
index e94bc1e..69918d0 100644
--- a/.env.example
+++ b/.env.example
@@ -1,6 +1,6 @@
# Copy to .env — never commit real values.
-DATABASE_URL="postgresql://macstudio3@localhost/spechomes?host=/tmp"
-DATABASE_URL_TEST="postgresql://macstudio3@localhost/spechomes_test?host=/tmp"
+DATABASE_URL="postgresql://macstudio3@localhost/homesonspec?host=/tmp"
+DATABASE_URL_TEST="postgresql://macstudio3@localhost/homesonspec_test?host=/tmp"
# Admin app HTTP Basic Auth (user:pass) — set a strong value; admin fails CLOSED if unset.
BASIC_AUTH="admin:CHANGE_ME_BEFORE_DEPLOY"
# Snapshot storage root (raw fetched bodies live on disk, not in PG)
diff --git a/README.md b/README.md
index 12ed3c5..2811eaf 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# SpecHomes.com
+# HomesOnSpec.com
**Every new home. Every builder. One search. Verified from the source.**
@@ -17,7 +17,7 @@ published). Top-10 national builder acquisition in progress (source registry + r
```sh
pnpm install
-createdb spechomes && psql -d spechomes -c 'CREATE EXTENSION pg_trgm'
+createdb homesonspec && psql -d homesonspec -c 'CREATE EXTENSION pg_trgm'
cp .env.example .env
pnpm db:migrate && pnpm db:seed
pnpm pipeline -- --adapter=meridian-homes-fixtures # fixture pipeline e2e
@@ -26,7 +26,7 @@ pnpm dev:admin # admin app → http://localhost:3101 (Basic Auth, BASIC_AU
```
Tests: `pnpm -r test` (unit) ·
-`pnpm --filter @spechomes/workers test:integration` (pipeline vs spechomes_test) ·
+`pnpm --filter @homesonspec/workers test:integration` (pipeline vs homesonspec_test) ·
`pnpm e2e` (Playwright, boots both apps).
## Architecture
@@ -46,7 +46,7 @@ docs/ product · data-rights (READ FIRST) · architecture · source-run
**The invariant that matters:** crawlers never write published tables. Data flows
source → RawSnapshot → StagedRecord (+ per-field SourceEvidence) → deterministic
validators (ValidationEvent, verdict) → human review when flagged →
-`@spechomes/publisher` — the single bridge to consumer-facing inventory. Missing values
+`@homesonspec/publisher` — the single bridge to consumer-facing inventory. Missing values
are null, never guessed; every published fact traces to evidence.
## Data rights
diff --git a/apps/admin/next.config.ts b/apps/admin/next.config.ts
index 9be57ea..5da9d91 100644
--- a/apps/admin/next.config.ts
+++ b/apps/admin/next.config.ts
@@ -7,12 +7,12 @@ const nextConfig: NextConfig = {
// Prisma client stays external so the query-engine binary resolves at runtime.
serverExternalPackages: ["@prisma/client", "pg-boss"],
transpilePackages: [
- "@spechomes/database",
- "@spechomes/schemas",
- "@spechomes/search",
- "@spechomes/shared",
- "@spechomes/shared-ui",
- "@spechomes/publisher",
+ "@homesonspec/database",
+ "@homesonspec/schemas",
+ "@homesonspec/search",
+ "@homesonspec/shared",
+ "@homesonspec/shared-ui",
+ "@homesonspec/publisher",
],
};
diff --git a/apps/admin/package.json b/apps/admin/package.json
index 963e171..c5388cf 100644
--- a/apps/admin/package.json
+++ b/apps/admin/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/admin",
+ "name": "@homesonspec/admin",
"version": "0.1.0",
"private": true,
"scripts": {
@@ -10,18 +10,18 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "@spechomes/database": "workspace:*",
- "@spechomes/schemas": "workspace:*",
- "@spechomes/search": "workspace:*",
- "@spechomes/shared": "workspace:*",
- "@spechomes/shared-ui": "workspace:*",
+ "@homesonspec/database": "workspace:*",
+ "@homesonspec/schemas": "workspace:*",
+ "@homesonspec/search": "workspace:*",
+ "@homesonspec/shared": "workspace:*",
+ "@homesonspec/shared-ui": "workspace:*",
"leaflet": "^1.9.4",
"react-leaflet": "^5.0.0",
"next": "16.2.10",
"react": "19.2.7",
"react-dom": "19.2.7",
"zod": "^3.24.1",
- "@spechomes/publisher": "workspace:*"
+ "@homesonspec/publisher": "workspace:*"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.0.0",
diff --git a/apps/admin/src/app/api/review/route.ts b/apps/admin/src/app/api/review/route.ts
index a611829..1be2f20 100644
--- a/apps/admin/src/app/api/review/route.ts
+++ b/apps/admin/src/app/api/review/route.ts
@@ -1,7 +1,7 @@
import { NextRequest, NextResponse } from "next/server";
import { z } from "zod";
-import { prisma } from "@spechomes/database";
-import { publishStagedRecord } from "@spechomes/publisher";
+import { prisma } from "@homesonspec/database";
+import { publishStagedRecord } from "@homesonspec/publisher";
const actionSchema = z.object({
reviewItemId: z.string(),
diff --git a/apps/admin/src/app/corrections/page.tsx b/apps/admin/src/app/corrections/page.tsx
index 81681de..42bd749 100644
--- a/apps/admin/src/app/corrections/page.tsx
+++ b/apps/admin/src/app/corrections/page.tsx
@@ -1,5 +1,5 @@
-import { prisma } from "@spechomes/database";
-import { CreatedChip } from "@spechomes/shared-ui";
+import { prisma } from "@homesonspec/database";
+import { CreatedChip } from "@homesonspec/shared-ui";
export const dynamic = "force-dynamic";
diff --git a/apps/admin/src/app/layout.tsx b/apps/admin/src/app/layout.tsx
index 5a01566..0425406 100644
--- a/apps/admin/src/app/layout.tsx
+++ b/apps/admin/src/app/layout.tsx
@@ -3,7 +3,7 @@ import Link from "next/link";
import "./globals.css";
export const metadata: Metadata = {
- title: "SpecHomes Admin",
+ title: "HomesOnSpec Admin",
robots: { index: false, follow: false },
};
@@ -14,7 +14,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
<header className="border-b border-neutral-200 bg-white">
<nav className="mx-auto flex max-w-7xl items-center gap-6 px-4 py-3 text-sm">
<Link href="/" className="text-lg font-bold text-neutral-900">
- SpecHomes <span className="text-teal-700">Admin</span>
+ HomesOnSpec <span className="text-teal-700">Admin</span>
</Link>
<Link href="/review" className="hover:text-teal-700">Review queue</Link>
<Link href="/sources" className="hover:text-teal-700">Sources</Link>
diff --git a/apps/admin/src/app/leads/page.tsx b/apps/admin/src/app/leads/page.tsx
index c9d8c4d..589ad9e 100644
--- a/apps/admin/src/app/leads/page.tsx
+++ b/apps/admin/src/app/leads/page.tsx
@@ -1,5 +1,5 @@
-import { prisma } from "@spechomes/database";
-import { CreatedChip } from "@spechomes/shared-ui";
+import { prisma } from "@homesonspec/database";
+import { CreatedChip } from "@homesonspec/shared-ui";
export const dynamic = "force-dynamic";
diff --git a/apps/admin/src/app/page.tsx b/apps/admin/src/app/page.tsx
index 3a9cc97..9780b6f 100644
--- a/apps/admin/src/app/page.tsx
+++ b/apps/admin/src/app/page.tsx
@@ -1,6 +1,6 @@
import Link from "next/link";
-import { prisma } from "@spechomes/database";
-import { CreatedChip } from "@spechomes/shared-ui";
+import { prisma } from "@homesonspec/database";
+import { CreatedChip } from "@homesonspec/shared-ui";
export const dynamic = "force-dynamic";
diff --git a/apps/admin/src/app/review/page.tsx b/apps/admin/src/app/review/page.tsx
index 5051809..7d0ad42 100644
--- a/apps/admin/src/app/review/page.tsx
+++ b/apps/admin/src/app/review/page.tsx
@@ -1,5 +1,5 @@
-import { prisma } from "@spechomes/database";
-import { CreatedChip } from "@spechomes/shared-ui";
+import { prisma } from "@homesonspec/database";
+import { CreatedChip } from "@homesonspec/shared-ui";
import ReviewActions from "./ReviewActions";
export const dynamic = "force-dynamic";
diff --git a/apps/admin/src/app/snapshots/page.tsx b/apps/admin/src/app/snapshots/page.tsx
index 100cc52..1255a2f 100644
--- a/apps/admin/src/app/snapshots/page.tsx
+++ b/apps/admin/src/app/snapshots/page.tsx
@@ -1,5 +1,5 @@
-import { prisma } from "@spechomes/database";
-import { CreatedChip } from "@spechomes/shared-ui";
+import { prisma } from "@homesonspec/database";
+import { CreatedChip } from "@homesonspec/shared-ui";
export const dynamic = "force-dynamic";
diff --git a/apps/admin/src/app/sources/page.tsx b/apps/admin/src/app/sources/page.tsx
index 1064f9b..2be4b12 100644
--- a/apps/admin/src/app/sources/page.tsx
+++ b/apps/admin/src/app/sources/page.tsx
@@ -1,5 +1,5 @@
-import { prisma } from "@spechomes/database";
-import { CreatedChip } from "@spechomes/shared-ui";
+import { prisma } from "@homesonspec/database";
+import { CreatedChip } from "@homesonspec/shared-ui";
export const dynamic = "force-dynamic";
diff --git a/apps/admin/src/app/validation/page.tsx b/apps/admin/src/app/validation/page.tsx
index 9deff0d..0e65605 100644
--- a/apps/admin/src/app/validation/page.tsx
+++ b/apps/admin/src/app/validation/page.tsx
@@ -1,5 +1,5 @@
-import { prisma } from "@spechomes/database";
-import { CreatedChip } from "@spechomes/shared-ui";
+import { prisma } from "@homesonspec/database";
+import { CreatedChip } from "@homesonspec/shared-ui";
export const dynamic = "force-dynamic";
diff --git a/apps/admin/src/middleware.ts b/apps/admin/src/middleware.ts
index 5053cd4..3d49510 100644
--- a/apps/admin/src/middleware.ts
+++ b/apps/admin/src/middleware.ts
@@ -28,7 +28,7 @@ export function middleware(request: NextRequest) {
}
return new NextResponse("Authentication required", {
status: 401,
- headers: { "WWW-Authenticate": 'Basic realm="SpecHomes Admin"' },
+ headers: { "WWW-Authenticate": 'Basic realm="HomesOnSpec Admin"' },
});
}
diff --git a/apps/admin/tsconfig.json b/apps/admin/tsconfig.json
index 840f56f..fc9cf0d 100644
--- a/apps/admin/tsconfig.json
+++ b/apps/admin/tsconfig.json
@@ -14,22 +14,22 @@
"@/*": [
"./src/*"
],
- "@spechomes/database": [
+ "@homesonspec/database": [
"../../packages/database/src/index.ts"
],
- "@spechomes/schemas": [
+ "@homesonspec/schemas": [
"../../packages/schemas/src/index.ts"
],
- "@spechomes/search": [
+ "@homesonspec/search": [
"../../packages/search/src/index.ts"
],
- "@spechomes/shared": [
+ "@homesonspec/shared": [
"../../packages/shared/src/index.ts"
],
- "@spechomes/shared-ui": [
+ "@homesonspec/shared-ui": [
"../../packages/shared-ui/src/index.ts"
],
- "@spechomes/publisher": [
+ "@homesonspec/publisher": [
"../../packages/publisher/src/index.ts"
]
}
diff --git a/apps/web/next.config.ts b/apps/web/next.config.ts
index 9be57ea..5da9d91 100644
--- a/apps/web/next.config.ts
+++ b/apps/web/next.config.ts
@@ -7,12 +7,12 @@ const nextConfig: NextConfig = {
// Prisma client stays external so the query-engine binary resolves at runtime.
serverExternalPackages: ["@prisma/client", "pg-boss"],
transpilePackages: [
- "@spechomes/database",
- "@spechomes/schemas",
- "@spechomes/search",
- "@spechomes/shared",
- "@spechomes/shared-ui",
- "@spechomes/publisher",
+ "@homesonspec/database",
+ "@homesonspec/schemas",
+ "@homesonspec/search",
+ "@homesonspec/shared",
+ "@homesonspec/shared-ui",
+ "@homesonspec/publisher",
],
};
diff --git a/apps/web/package.json b/apps/web/package.json
index 7063a7c..523b138 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/web",
+ "name": "@homesonspec/web",
"version": "0.1.0",
"private": true,
"scripts": {
@@ -10,11 +10,11 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "@spechomes/database": "workspace:*",
- "@spechomes/schemas": "workspace:*",
- "@spechomes/search": "workspace:*",
- "@spechomes/shared": "workspace:*",
- "@spechomes/shared-ui": "workspace:*",
+ "@homesonspec/database": "workspace:*",
+ "@homesonspec/schemas": "workspace:*",
+ "@homesonspec/search": "workspace:*",
+ "@homesonspec/shared": "workspace:*",
+ "@homesonspec/shared-ui": "workspace:*",
"leaflet": "^1.9.4",
"react-leaflet": "^5.0.0",
"next": "16.2.10",
diff --git a/apps/web/src/app/HeroMap.tsx b/apps/web/src/app/HeroMap.tsx
index efcafb7..0ae0c1f 100644
--- a/apps/web/src/app/HeroMap.tsx
+++ b/apps/web/src/app/HeroMap.tsx
@@ -1,11 +1,11 @@
"use client";
import dynamic from "next/dynamic";
-import type { MapMarker } from "@spechomes/shared-ui/src/MapView";
+import type { MapMarker } from "@homesonspec/shared-ui/src/MapView";
// Leaflet needs window — client-only load, direct file import (not the barrel),
// matching the search page. Renders on mount, so the hero map is live on page load.
-const MapView = dynamic(() => import("@spechomes/shared-ui/src/MapView").then((m) => m.MapView), {
+const MapView = dynamic(() => import("@homesonspec/shared-ui/src/MapView").then((m) => m.MapView), {
ssr: false,
loading: () => (
<div className="flex h-full w-full items-center justify-center bg-teal-950/40 text-sm text-teal-100">
diff --git a/apps/web/src/app/[state]/[city]/page.tsx b/apps/web/src/app/[state]/[city]/page.tsx
index 477bdd1..d6d9157 100644
--- a/apps/web/src/app/[state]/[city]/page.tsx
+++ b/apps/web/src/app/[state]/[city]/page.tsx
@@ -1,7 +1,7 @@
import Link from "next/link";
import { notFound } from "next/navigation";
-import { prisma } from "@spechomes/database";
-import { fmtPrice } from "@spechomes/shared-ui";
+import { prisma } from "@homesonspec/database";
+import { fmtPrice } from "@homesonspec/shared-ui";
export const dynamic = "force-dynamic";
diff --git a/apps/web/src/app/api/corrections/route.ts b/apps/web/src/app/api/corrections/route.ts
index 70da4ca..bbb979f 100644
--- a/apps/web/src/app/api/corrections/route.ts
+++ b/apps/web/src/app/api/corrections/route.ts
@@ -1,6 +1,6 @@
import { NextRequest, NextResponse } from "next/server";
import { z } from "zod";
-import { prisma } from "@spechomes/database";
+import { prisma } from "@homesonspec/database";
const correctionSchema = z.object({
entityType: z.enum(["INVENTORY_HOME", "COMMUNITY", "FLOOR_PLAN", "INCENTIVE", "BUILDER"]),
diff --git a/apps/web/src/app/api/facets/route.ts b/apps/web/src/app/api/facets/route.ts
index 18be960..a18cc6f 100644
--- a/apps/web/src/app/api/facets/route.ts
+++ b/apps/web/src/app/api/facets/route.ts
@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from "next/server";
-import { runFacets } from "@spechomes/search";
+import { runFacets } from "@homesonspec/search";
import { parseSearchParams } from "../../../lib/parse-search";
export const dynamic = "force-dynamic";
diff --git a/apps/web/src/app/api/leads/route.ts b/apps/web/src/app/api/leads/route.ts
index 55bdfad..e310c38 100644
--- a/apps/web/src/app/api/leads/route.ts
+++ b/apps/web/src/app/api/leads/route.ts
@@ -1,6 +1,6 @@
import { NextRequest, NextResponse } from "next/server";
import { z } from "zod";
-import { prisma } from "@spechomes/database";
+import { prisma } from "@homesonspec/database";
const leadSchema = z.object({
name: z.string().min(1).max(200),
diff --git a/apps/web/src/app/api/map/route.ts b/apps/web/src/app/api/map/route.ts
index 806af79..856d092 100644
--- a/apps/web/src/app/api/map/route.ts
+++ b/apps/web/src/app/api/map/route.ts
@@ -1,5 +1,5 @@
import { NextResponse } from "next/server";
-import { prisma } from "@spechomes/database";
+import { prisma } from "@homesonspec/database";
export const dynamic = "force-dynamic";
diff --git a/apps/web/src/app/api/search/route.ts b/apps/web/src/app/api/search/route.ts
index b19e7c4..6eb1f6c 100644
--- a/apps/web/src/app/api/search/route.ts
+++ b/apps/web/src/app/api/search/route.ts
@@ -1,5 +1,5 @@
import { NextRequest, NextResponse } from "next/server";
-import { runSearch } from "@spechomes/search";
+import { runSearch } from "@homesonspec/search";
import { parseSearchParams } from "../../../lib/parse-search";
export const dynamic = "force-dynamic";
diff --git a/apps/web/src/app/builders/[slug]/page.tsx b/apps/web/src/app/builders/[slug]/page.tsx
index 4125caa..f1b6ed6 100644
--- a/apps/web/src/app/builders/[slug]/page.tsx
+++ b/apps/web/src/app/builders/[slug]/page.tsx
@@ -1,7 +1,7 @@
import Link from "next/link";
import { notFound } from "next/navigation";
-import { prisma } from "@spechomes/database";
-import { fmtPrice } from "@spechomes/shared-ui";
+import { prisma } from "@homesonspec/database";
+import { fmtPrice } from "@homesonspec/shared-ui";
export const dynamic = "force-dynamic";
diff --git a/apps/web/src/app/builders/page.tsx b/apps/web/src/app/builders/page.tsx
index ee7a1c5..ac44c26 100644
--- a/apps/web/src/app/builders/page.tsx
+++ b/apps/web/src/app/builders/page.tsx
@@ -1,5 +1,5 @@
import Link from "next/link";
-import { prisma } from "@spechomes/database";
+import { prisma } from "@homesonspec/database";
export const dynamic = "force-dynamic";
diff --git a/apps/web/src/app/communities/[slug]/page.tsx b/apps/web/src/app/communities/[slug]/page.tsx
index 5a9d9cf..31c94f6 100644
--- a/apps/web/src/app/communities/[slug]/page.tsx
+++ b/apps/web/src/app/communities/[slug]/page.tsx
@@ -1,7 +1,7 @@
import Link from "next/link";
import { notFound } from "next/navigation";
-import { prisma } from "@spechomes/database";
-import { fmtPrice, VerificationBadge } from "@spechomes/shared-ui";
+import { prisma } from "@homesonspec/database";
+import { fmtPrice, VerificationBadge } from "@homesonspec/shared-ui";
export const dynamic = "force-dynamic";
diff --git a/apps/web/src/app/compare/page.tsx b/apps/web/src/app/compare/page.tsx
index 792bb2e..0df6f7e 100644
--- a/apps/web/src/app/compare/page.tsx
+++ b/apps/web/src/app/compare/page.tsx
@@ -2,7 +2,7 @@
import { useEffect, useState } from "react";
import Link from "next/link";
-import { fmtPrice } from "@spechomes/shared-ui";
+import { fmtPrice } from "@homesonspec/shared-ui";
interface Home {
id: string;
@@ -26,7 +26,7 @@ export default function ComparePage() {
const [loaded, setLoaded] = useState(false);
useEffect(() => {
- const ids: string[] = JSON.parse(localStorage.getItem("spechomes.compare") ?? "[]");
+ const ids: string[] = JSON.parse(localStorage.getItem("homesonspec.compare") ?? "[]");
if (ids.length === 0) {
setLoaded(true);
return;
diff --git a/apps/web/src/app/contact/page.tsx b/apps/web/src/app/contact/page.tsx
index 0197605..7d2c2c9 100644
--- a/apps/web/src/app/contact/page.tsx
+++ b/apps/web/src/app/contact/page.tsx
@@ -1,4 +1,4 @@
-import { prisma } from "@spechomes/database";
+import { prisma } from "@homesonspec/database";
import ContactClient from "./ContactClient";
export const dynamic = "force-dynamic";
diff --git a/apps/web/src/app/homes/[id]/page.tsx b/apps/web/src/app/homes/[id]/page.tsx
index 340eecb..403ae5b 100644
--- a/apps/web/src/app/homes/[id]/page.tsx
+++ b/apps/web/src/app/homes/[id]/page.tsx
@@ -1,7 +1,7 @@
import Link from "next/link";
import { notFound } from "next/navigation";
-import { prisma } from "@spechomes/database";
-import { fmtPrice, VerificationBadge } from "@spechomes/shared-ui";
+import { prisma } from "@homesonspec/database";
+import { fmtPrice, VerificationBadge } from "@homesonspec/shared-ui";
import CorrectionForm from "./CorrectionForm";
import LeadForm from "./LeadForm";
diff --git a/apps/web/src/app/map/MapExplorer.tsx b/apps/web/src/app/map/MapExplorer.tsx
index dd71aae..e9bdded 100644
--- a/apps/web/src/app/map/MapExplorer.tsx
+++ b/apps/web/src/app/map/MapExplorer.tsx
@@ -63,7 +63,7 @@ const COLOR_BY = [
{ v: "builder", label: "Builder" },
];
-const LS_KEY = "spechomes.map.v1";
+const LS_KEY = "homesonspec.map.v1";
const fmtPrice = (p: number | null) => (p === null ? "Price on request" : `$${p.toLocaleString()}`);
const statusLabel = (s: string) => STATUS.find((x) => x.v === s)?.label ?? s;
diff --git a/apps/web/src/app/page.tsx b/apps/web/src/app/page.tsx
index 016457f..c8493b6 100644
--- a/apps/web/src/app/page.tsx
+++ b/apps/web/src/app/page.tsx
@@ -1,5 +1,5 @@
import Link from "next/link";
-import { prisma } from "@spechomes/database";
+import { prisma } from "@homesonspec/database";
import HeroMap from "./HeroMap";
export const dynamic = "force-dynamic";
diff --git a/apps/web/src/app/plans/[id]/page.tsx b/apps/web/src/app/plans/[id]/page.tsx
index e28625b..b621413 100644
--- a/apps/web/src/app/plans/[id]/page.tsx
+++ b/apps/web/src/app/plans/[id]/page.tsx
@@ -1,7 +1,7 @@
import Link from "next/link";
import { notFound } from "next/navigation";
-import { prisma } from "@spechomes/database";
-import { fmtPrice } from "@spechomes/shared-ui";
+import { prisma } from "@homesonspec/database";
+import { fmtPrice } from "@homesonspec/shared-ui";
export const dynamic = "force-dynamic";
diff --git a/apps/web/src/app/saved/page.tsx b/apps/web/src/app/saved/page.tsx
index 2caec18..b179245 100644
--- a/apps/web/src/app/saved/page.tsx
+++ b/apps/web/src/app/saved/page.tsx
@@ -7,7 +7,7 @@ import Link from "next/link";
export default function SavedPage() {
const [ids, setIds] = useState<string[]>([]);
useEffect(() => {
- setIds(JSON.parse(localStorage.getItem("spechomes.saved") ?? "[]"));
+ setIds(JSON.parse(localStorage.getItem("homesonspec.saved") ?? "[]"));
}, []);
return (
diff --git a/apps/web/src/app/search/SearchClient.tsx b/apps/web/src/app/search/SearchClient.tsx
index 85ea5e4..657c438 100644
--- a/apps/web/src/app/search/SearchClient.tsx
+++ b/apps/web/src/app/search/SearchClient.tsx
@@ -3,10 +3,10 @@
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import dynamic from "next/dynamic";
import Link from "next/link";
-import { fmtPrice, VerificationBadge } from "@spechomes/shared-ui";
+import { fmtPrice, VerificationBadge } from "@homesonspec/shared-ui";
// Leaflet needs window — client-only load, direct file import (not the barrel).
-const MapView = dynamic(() => import("@spechomes/shared-ui/src/MapView").then((m) => m.MapView), { ssr: false });
+const MapView = dynamic(() => import("@homesonspec/shared-ui/src/MapView").then((m) => m.MapView), { ssr: false });
interface Home {
id: string;
@@ -86,19 +86,19 @@ export default function SearchClient({ initialQuery }: { initialQuery: string })
const bboxRef = useRef<string | null>(null);
useEffect(() => {
- const savedSort = localStorage.getItem("spechomes.sort");
- const savedCols = localStorage.getItem("spechomes.cols");
+ const savedSort = localStorage.getItem("homesonspec.sort");
+ const savedCols = localStorage.getItem("homesonspec.cols");
if (savedSort) setSort(savedSort);
if (savedCols) setCols(Number(savedCols));
}, []);
const setSortPersist = (value: string) => {
setSort(value);
- localStorage.setItem("spechomes.sort", value);
+ localStorage.setItem("homesonspec.sort", value);
};
const setColsPersist = (value: number) => {
setCols(value);
- localStorage.setItem("spechomes.cols", String(value));
+ localStorage.setItem("homesonspec.cols", String(value));
};
const queryString = useMemo(() => {
diff --git a/apps/web/src/lib/parse-search.ts b/apps/web/src/lib/parse-search.ts
index a51d0c3..c13c2c9 100644
--- a/apps/web/src/lib/parse-search.ts
+++ b/apps/web/src/lib/parse-search.ts
@@ -1,4 +1,4 @@
-import type { SearchParams } from "@spechomes/search";
+import type { SearchParams } from "@homesonspec/search";
function num(v: string | null): number | undefined {
if (v === null || v === "") return undefined;
diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json
index 840f56f..fc9cf0d 100644
--- a/apps/web/tsconfig.json
+++ b/apps/web/tsconfig.json
@@ -14,22 +14,22 @@
"@/*": [
"./src/*"
],
- "@spechomes/database": [
+ "@homesonspec/database": [
"../../packages/database/src/index.ts"
],
- "@spechomes/schemas": [
+ "@homesonspec/schemas": [
"../../packages/schemas/src/index.ts"
],
- "@spechomes/search": [
+ "@homesonspec/search": [
"../../packages/search/src/index.ts"
],
- "@spechomes/shared": [
+ "@homesonspec/shared": [
"../../packages/shared/src/index.ts"
],
- "@spechomes/shared-ui": [
+ "@homesonspec/shared-ui": [
"../../packages/shared-ui/src/index.ts"
],
- "@spechomes/publisher": [
+ "@homesonspec/publisher": [
"../../packages/publisher/src/index.ts"
]
}
diff --git a/apps/workers/package.json b/apps/workers/package.json
index c6260c6..0243f88 100644
--- a/apps/workers/package.json
+++ b/apps/workers/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/workers",
+ "name": "@homesonspec/workers",
"version": "0.1.0",
"private": true,
"type": "module",
@@ -12,21 +12,21 @@
"test:integration": "vitest run --config vitest.integration.config.ts"
},
"dependencies": {
- "@spechomes/database": "workspace:*",
- "@spechomes/schemas": "workspace:*",
- "@spechomes/validation": "workspace:*",
- "@spechomes/shared": "workspace:*",
- "@spechomes/collectors-common": "workspace:*",
- "@spechomes/collector-meridian-homes": "workspace:*",
+ "@homesonspec/database": "workspace:*",
+ "@homesonspec/schemas": "workspace:*",
+ "@homesonspec/validation": "workspace:*",
+ "@homesonspec/shared": "workspace:*",
+ "@homesonspec/collectors-common": "workspace:*",
+ "@homesonspec/collector-meridian-homes": "workspace:*",
"pg-boss": "^10.1.5",
- "@spechomes/publisher": "workspace:*",
- "@spechomes/collector-toll-brothers": "workspace:*",
- "@spechomes/collector-lennar": "workspace:*",
- "@spechomes/collector-dr-horton": "workspace:*",
- "@spechomes/collector-kb-home": "workspace:*",
- "@spechomes/collector-pulte": "workspace:*",
- "@spechomes/collector-tri-pointe": "workspace:*",
- "@spechomes/collector-taylor-morrison": "workspace:*"
+ "@homesonspec/publisher": "workspace:*",
+ "@homesonspec/collector-toll-brothers": "workspace:*",
+ "@homesonspec/collector-lennar": "workspace:*",
+ "@homesonspec/collector-dr-horton": "workspace:*",
+ "@homesonspec/collector-kb-home": "workspace:*",
+ "@homesonspec/collector-pulte": "workspace:*",
+ "@homesonspec/collector-tri-pointe": "workspace:*",
+ "@homesonspec/collector-taylor-morrison": "workspace:*"
},
"devDependencies": {
"tsx": "^4.19.2",
diff --git a/apps/workers/src/cli.ts b/apps/workers/src/cli.ts
index 88a7963..121b3b9 100644
--- a/apps/workers/src/cli.ts
+++ b/apps/workers/src/cli.ts
@@ -1,18 +1,18 @@
-import { prisma } from "@spechomes/database";
-import { meridianHomesAdapter } from "@spechomes/collector-meridian-homes";
-import { tollBrothersAdapter } from "@spechomes/collector-toll-brothers";
-import { lennarAdapter } from "@spechomes/collector-lennar";
-import { drHortonAdapter } from "@spechomes/collector-dr-horton";
-import { kbHomeAdapter } from "@spechomes/collector-kb-home";
-import { pulteAdapter } from "@spechomes/collector-pulte";
-import { triPointeAdapter } from "@spechomes/collector-tri-pointe";
-import { taylorMorrisonAdapter } from "@spechomes/collector-taylor-morrison";
+import { prisma } from "@homesonspec/database";
+import { meridianHomesAdapter } from "@homesonspec/collector-meridian-homes";
+import { tollBrothersAdapter } from "@homesonspec/collector-toll-brothers";
+import { lennarAdapter } from "@homesonspec/collector-lennar";
+import { drHortonAdapter } from "@homesonspec/collector-dr-horton";
+import { kbHomeAdapter } from "@homesonspec/collector-kb-home";
+import { pulteAdapter } from "@homesonspec/collector-pulte";
+import { triPointeAdapter } from "@homesonspec/collector-tri-pointe";
+import { taylorMorrisonAdapter } from "@homesonspec/collector-taylor-morrison";
import { runPipeline } from "./pipeline";
import { recordSourceRun } from "./verify";
/**
* Direct pipeline runner — no queue required.
- * pnpm --filter @spechomes/workers pipeline -- --adapter=meridian-homes-fixtures
+ * pnpm --filter @homesonspec/workers pipeline -- --adapter=meridian-homes-fixtures
*/
const ADAPTERS = {
[meridianHomesAdapter.key]: meridianHomesAdapter,
diff --git a/apps/workers/src/index.ts b/apps/workers/src/index.ts
index f01f2e8..13e5138 100644
--- a/apps/workers/src/index.ts
+++ b/apps/workers/src/index.ts
@@ -1,5 +1,5 @@
-import { work } from "@spechomes/shared";
-import { meridianHomesAdapter } from "@spechomes/collector-meridian-homes";
+import { work } from "@homesonspec/shared";
+import { meridianHomesAdapter } from "@homesonspec/collector-meridian-homes";
import { runPipeline } from "./pipeline";
/**
diff --git a/apps/workers/src/pipeline.itest.ts b/apps/workers/src/pipeline.itest.ts
index 7de3d92..093bdee 100644
--- a/apps/workers/src/pipeline.itest.ts
+++ b/apps/workers/src/pipeline.itest.ts
@@ -1,11 +1,11 @@
import { beforeAll, describe, expect, it } from "vitest";
-import { prisma } from "@spechomes/database";
-import { meridianHomesAdapter } from "@spechomes/collector-meridian-homes";
-import { publishStagedRecord } from "@spechomes/publisher";
+import { prisma } from "@homesonspec/database";
+import { meridianHomesAdapter } from "@homesonspec/collector-meridian-homes";
+import { publishStagedRecord } from "@homesonspec/publisher";
import { runPipeline, validateStage } from "./pipeline";
/**
- * Integration: the full fixture pipeline against spechomes_test.
+ * Integration: the full fixture pipeline against homesonspec_test.
* Proves raw ≠ published separation, verdict gating, idempotence,
* community auto-creation from staged records, and review-queue flow.
*/
@@ -23,7 +23,7 @@ async function resetDb() {
}
beforeAll(async () => {
- expect(process.env.DATABASE_URL).toMatch(/spechomes_test/);
+ expect(process.env.DATABASE_URL).toMatch(/homesonspec_test/);
await resetDb();
// Minimal FK targets: builder + fixture source. NO community — the
// pipeline must create it from the staged community record.
diff --git a/apps/workers/src/pipeline.ts b/apps/workers/src/pipeline.ts
index bcb9ed1..f11a844 100644
--- a/apps/workers/src/pipeline.ts
+++ b/apps/workers/src/pipeline.ts
@@ -5,18 +5,18 @@ import {
type EntityType,
type Prisma,
type SourceRegistry,
-} from "@spechomes/database";
-import { validatePayload, type ExtractedRecord } from "@spechomes/schemas";
-import { canonicalKey } from "@spechomes/shared";
+} from "@homesonspec/database";
+import { validatePayload, type ExtractedRecord } from "@homesonspec/schemas";
+import { canonicalKey } from "@homesonspec/shared";
import {
ALL_RULES,
runValidation,
VALIDATOR_VERSION,
type RuleDb,
type StagedCandidate,
-} from "@spechomes/validation";
-import type { RawPage, SourceAdapter } from "@spechomes/collectors-common";
-import { publishStagedRecord } from "@spechomes/publisher";
+} from "@homesonspec/validation";
+import type { RawPage, SourceAdapter } from "@homesonspec/collectors-common";
+import { publishStagedRecord } from "@homesonspec/publisher";
import { recordSourceRun } from "./verify";
export { publishStagedRecord };
diff --git a/apps/workers/src/verify-cli.ts b/apps/workers/src/verify-cli.ts
index 50b1236..c3860f8 100644
--- a/apps/workers/src/verify-cli.ts
+++ b/apps/workers/src/verify-cli.ts
@@ -1,15 +1,15 @@
-import { prisma } from "@spechomes/database";
+import { prisma } from "@homesonspec/database";
import { recomputeFreshness, dedupePass, refreshDue } from "./verify";
/**
* Verification-engine CLI — the Stage-3 maintenance commands.
*
- * pnpm --filter @spechomes/workers verify -- freshness
- * pnpm --filter @spechomes/workers verify -- dedupe # dry-run
- * pnpm --filter @spechomes/workers verify -- dedupe --apply # write
- * pnpm --filter @spechomes/workers verify -- refresh-due
- * pnpm --filter @spechomes/workers verify -- health
- * pnpm --filter @spechomes/workers verify -- all # freshness + dedupe(dry) + due + health
+ * pnpm --filter @homesonspec/workers verify -- freshness
+ * pnpm --filter @homesonspec/workers verify -- dedupe # dry-run
+ * pnpm --filter @homesonspec/workers verify -- dedupe --apply # write
+ * pnpm --filter @homesonspec/workers verify -- refresh-due
+ * pnpm --filter @homesonspec/workers verify -- health
+ * pnpm --filter @homesonspec/workers verify -- all # freshness + dedupe(dry) + due + health
*/
async function health() {
const sources = await prisma.sourceRegistry.findMany({
diff --git a/apps/workers/src/verify.ts b/apps/workers/src/verify.ts
index 9345ecf..8230ae7 100644
--- a/apps/workers/src/verify.ts
+++ b/apps/workers/src/verify.ts
@@ -1,4 +1,4 @@
-import { prisma, type Freshness, type VerificationLabel } from "@spechomes/database";
+import { prisma, type Freshness, type VerificationLabel } from "@homesonspec/database";
/**
* Stage-3 verification engine — the maintenance layer that runs OVER already
diff --git a/apps/workers/vitest.integration.setup.ts b/apps/workers/vitest.integration.setup.ts
index fbaf171..641ad28 100644
--- a/apps/workers/vitest.integration.setup.ts
+++ b/apps/workers/vitest.integration.setup.ts
@@ -1,8 +1,8 @@
// Point the Prisma singleton at the TEST database before any test module
-// imports @spechomes/database. Refuses to run against a non-test DB.
+// imports @homesonspec/database. Refuses to run against a non-test DB.
const testUrl =
- process.env.DATABASE_URL_TEST ?? "postgresql://macstudio3@localhost/spechomes_test?host=/tmp";
-if (!/spechomes_test/.test(testUrl)) {
+ process.env.DATABASE_URL_TEST ?? "postgresql://macstudio3@localhost/homesonspec_test?host=/tmp";
+if (!/homesonspec_test/.test(testUrl)) {
throw new Error(`integration tests require a *_test database, got: ${testUrl}`);
}
process.env.DATABASE_URL = testUrl;
diff --git a/cert-homesonspec.sh b/cert-homesonspec.sh
index 9505a0a..21a082e 100644
--- a/cert-homesonspec.sh
+++ b/cert-homesonspec.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# Valid Let's Encrypt cert for homesonspec.com via webroot (works despite the proxy-all vhost).
-# ! bash ~/Projects/spechomes/cert-homesonspec.sh
+# ! bash ~/Projects/homesonspec/cert-homesonspec.sh
set -euo pipefail
KH=root@45.61.58.125; WEB=9975; ADMIN=9976
diff --git a/collectors/BUILDERS.md b/collectors/BUILDERS.md
index 1d23a11..d13de01 100644
--- a/collectors/BUILDERS.md
+++ b/collectors/BUILDERS.md
@@ -41,5 +41,5 @@ Each carries a per-community sales phone. Adapters are CA-scoped via an env var.
## Notes
- Register each in `apps/workers/src/cli.ts` ADAPTERS + add workspace dep in `apps/workers/package.json`.
-- SourceRegistry rows exist for all (inactive). To ingest: activate + set collectionMethod=CRAWL, deploy adapters to Kamatera, run `pnpm --filter @spechomes/workers pipeline -- --adapter=<key>` with the state env.
+- SourceRegistry rows exist for all (inactive). To ingest: activate + set collectionMethod=CRAWL, deploy adapters to Kamatera, run `pnpm --filter @homesonspec/workers pipeline -- --adapter=<key>` with the state env.
- Pulte/Meritage give lat/lon → homes appear on the map. KB/DR-Horton/TriPointe/TaylorMorrison lack per-home geo in v1 (search/lists only) — geocoding is a follow-up.
diff --git a/collectors/common/package.json b/collectors/common/package.json
index d46211d..d418fea 100644
--- a/collectors/common/package.json
+++ b/collectors/common/package.json
@@ -1,11 +1,11 @@
{
- "name": "@spechomes/collectors-common",
+ "name": "@homesonspec/collectors-common",
"version": "0.1.0",
"private": true,
"type": "module",
"main": "./src/index.ts",
"types": "./src/index.ts",
"scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
- "dependencies": { "@spechomes/schemas": "workspace:*", "@spechomes/shared": "workspace:*", "node-html-parser": "^7.0.1" },
+ "dependencies": { "@homesonspec/schemas": "workspace:*", "@homesonspec/shared": "workspace:*", "node-html-parser": "^7.0.1" },
"devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
}
diff --git a/collectors/common/src/adapter.ts b/collectors/common/src/adapter.ts
index 87f9f8a..35e1fdd 100644
--- a/collectors/common/src/adapter.ts
+++ b/collectors/common/src/adapter.ts
@@ -1,7 +1,7 @@
import { createHash } from "node:crypto";
import { readFile, readdir } from "node:fs/promises";
import { join } from "node:path";
-import type { ExtractedRecord } from "@spechomes/schemas";
+import type { ExtractedRecord } from "@homesonspec/schemas";
/**
* The contract every builder collector implements. v1 ships fixture mode
diff --git a/collectors/dr-horton/package.json b/collectors/dr-horton/package.json
index ecade98..beaf362 100644
--- a/collectors/dr-horton/package.json
+++ b/collectors/dr-horton/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/collector-dr-horton",
+ "name": "@homesonspec/collector-dr-horton",
"version": "0.1.0",
"private": true,
"type": "module",
@@ -7,9 +7,9 @@
"types": "./src/index.ts",
"scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
"dependencies": {
- "@spechomes/collectors-common": "workspace:*",
- "@spechomes/schemas": "workspace:*",
- "@spechomes/shared": "workspace:*"
+ "@homesonspec/collectors-common": "workspace:*",
+ "@homesonspec/schemas": "workspace:*",
+ "@homesonspec/shared": "workspace:*"
},
"devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
}
diff --git a/collectors/dr-horton/src/index.ts b/collectors/dr-horton/src/index.ts
index 3bd5331..3dad1b8 100644
--- a/collectors/dr-horton/src/index.ts
+++ b/collectors/dr-horton/src/index.ts
@@ -1,4 +1,4 @@
-import type { ExtractedRecord, FieldValue } from "@spechomes/schemas";
+import type { ExtractedRecord, FieldValue } from "@homesonspec/schemas";
import {
fetchFixtures,
LiveFetcher,
@@ -6,7 +6,7 @@ import {
type FetchContext,
type RawPage,
type SourceAdapter,
-} from "@spechomes/collectors-common";
+} from "@homesonspec/collectors-common";
/**
* D.R. Horton adapter — EMBEDDED_JSON source (recon 2026-07-23).
diff --git a/collectors/dream-finders/package.json b/collectors/dream-finders/package.json
index 60bc81a..432d0c5 100644
--- a/collectors/dream-finders/package.json
+++ b/collectors/dream-finders/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/collector-dream-finders",
+ "name": "@homesonspec/collector-dream-finders",
"version": "0.1.0",
"private": true,
"type": "module",
@@ -7,9 +7,9 @@
"types": "./src/index.ts",
"scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
"dependencies": {
- "@spechomes/collectors-common": "workspace:*",
- "@spechomes/schemas": "workspace:*",
- "@spechomes/shared": "workspace:*"
+ "@homesonspec/collectors-common": "workspace:*",
+ "@homesonspec/schemas": "workspace:*",
+ "@homesonspec/shared": "workspace:*"
},
"devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
}
diff --git a/collectors/dream-finders/src/index.ts b/collectors/dream-finders/src/index.ts
index 2900257..f061510 100644
--- a/collectors/dream-finders/src/index.ts
+++ b/collectors/dream-finders/src/index.ts
@@ -1,5 +1,5 @@
-import type { ExtractedRecord, FieldValue } from "@spechomes/schemas";
-import { normalizeStateCode } from "@spechomes/shared";
+import type { ExtractedRecord, FieldValue } from "@homesonspec/schemas";
+import { normalizeStateCode } from "@homesonspec/shared";
import {
fetchFixtures,
LiveFetcher,
@@ -7,7 +7,7 @@ import {
type FetchContext,
type RawPage,
type SourceAdapter,
-} from "@spechomes/collectors-common";
+} from "@homesonspec/collectors-common";
/**
* Dream Finders adapter — EMBEDDED_JSON source (recon 2026-07-22, difficulty 1).
diff --git a/collectors/kb-home/package.json b/collectors/kb-home/package.json
index 1a18246..deb1512 100644
--- a/collectors/kb-home/package.json
+++ b/collectors/kb-home/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/collector-kb-home",
+ "name": "@homesonspec/collector-kb-home",
"version": "0.1.0",
"private": true,
"type": "module",
@@ -7,9 +7,9 @@
"types": "./src/index.ts",
"scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
"dependencies": {
- "@spechomes/collectors-common": "workspace:*",
- "@spechomes/schemas": "workspace:*",
- "@spechomes/shared": "workspace:*"
+ "@homesonspec/collectors-common": "workspace:*",
+ "@homesonspec/schemas": "workspace:*",
+ "@homesonspec/shared": "workspace:*"
},
"devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
}
diff --git a/collectors/kb-home/src/index.ts b/collectors/kb-home/src/index.ts
index 7caf5b9..757c590 100644
--- a/collectors/kb-home/src/index.ts
+++ b/collectors/kb-home/src/index.ts
@@ -1,4 +1,4 @@
-import type { ExtractedRecord, FieldValue } from "@spechomes/schemas";
+import type { ExtractedRecord, FieldValue } from "@homesonspec/schemas";
import {
fetchFixtures,
LiveFetcher,
@@ -6,7 +6,7 @@ import {
type FetchContext,
type RawPage,
type SourceAdapter,
-} from "@spechomes/collectors-common";
+} from "@homesonspec/collectors-common";
/**
* KB Home adapter — SINGLE_FEED source (recon 2026-07-23).
diff --git a/collectors/lennar/package.json b/collectors/lennar/package.json
index 07f0c1a..abfec4f 100644
--- a/collectors/lennar/package.json
+++ b/collectors/lennar/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/collector-lennar",
+ "name": "@homesonspec/collector-lennar",
"version": "0.1.0",
"private": true,
"type": "module",
@@ -7,9 +7,9 @@
"types": "./src/index.ts",
"scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
"dependencies": {
- "@spechomes/collectors-common": "workspace:*",
- "@spechomes/schemas": "workspace:*",
- "@spechomes/shared": "workspace:*"
+ "@homesonspec/collectors-common": "workspace:*",
+ "@homesonspec/schemas": "workspace:*",
+ "@homesonspec/shared": "workspace:*"
},
"devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
}
diff --git a/collectors/lennar/src/index.ts b/collectors/lennar/src/index.ts
index 3608b31..cd43498 100644
--- a/collectors/lennar/src/index.ts
+++ b/collectors/lennar/src/index.ts
@@ -1,5 +1,5 @@
-import type { ExtractedRecord, FieldValue } from "@spechomes/schemas";
-import { normalizeStateCode } from "@spechomes/shared";
+import type { ExtractedRecord, FieldValue } from "@homesonspec/schemas";
+import { normalizeStateCode } from "@homesonspec/shared";
import {
fetchFixtures,
LiveFetcher,
@@ -7,7 +7,7 @@ import {
type FetchContext,
type RawPage,
type SourceAdapter,
-} from "@spechomes/collectors-common";
+} from "@homesonspec/collectors-common";
/**
* Lennar adapter — EMBEDDED_JSON source (recon 2026-07-22, difficulty 2).
diff --git a/collectors/meridian-homes/package.json b/collectors/meridian-homes/package.json
index 4ebde17..aa49873 100644
--- a/collectors/meridian-homes/package.json
+++ b/collectors/meridian-homes/package.json
@@ -1,11 +1,11 @@
{
- "name": "@spechomes/collector-meridian-homes",
+ "name": "@homesonspec/collector-meridian-homes",
"version": "0.1.0",
"private": true,
"type": "module",
"main": "./src/index.ts",
"types": "./src/index.ts",
"scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
- "dependencies": { "@spechomes/collectors-common": "workspace:*", "@spechomes/schemas": "workspace:*", "@spechomes/shared": "workspace:*", "node-html-parser": "^7.0.1" },
+ "dependencies": { "@homesonspec/collectors-common": "workspace:*", "@homesonspec/schemas": "workspace:*", "@homesonspec/shared": "workspace:*", "node-html-parser": "^7.0.1" },
"devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
}
diff --git a/collectors/meridian-homes/src/extract.test.ts b/collectors/meridian-homes/src/extract.test.ts
index 775caf0..4603483 100644
--- a/collectors/meridian-homes/src/extract.test.ts
+++ b/collectors/meridian-homes/src/extract.test.ts
@@ -1,7 +1,7 @@
import { readFile } from "node:fs/promises";
import { join } from "node:path";
import { describe, expect, it } from "vitest";
-import { sha256 } from "@spechomes/collectors-common";
+import { sha256 } from "@homesonspec/collectors-common";
import { meridianHomesAdapter } from "./index";
const FIXTURE_DIR = join(import.meta.dirname, "../../../fixtures/raw-pages/meridian-homes");
diff --git a/collectors/meridian-homes/src/index.ts b/collectors/meridian-homes/src/index.ts
index 6fc531c..e960f6a 100644
--- a/collectors/meridian-homes/src/index.ts
+++ b/collectors/meridian-homes/src/index.ts
@@ -1,11 +1,11 @@
import { parse, type HTMLElement } from "node-html-parser";
-import type { ExtractedRecord, FieldValue } from "@spechomes/schemas";
+import type { ExtractedRecord, FieldValue } from "@homesonspec/schemas";
import {
fetchFixtures,
type ExtractionOutput,
type RawPage,
type SourceAdapter,
-} from "@spechomes/collectors-common";
+} from "@homesonspec/collectors-common";
/**
* Meridian Homes adapter — the reference fixture adapter. Deterministic
diff --git a/collectors/pulte/package.json b/collectors/pulte/package.json
index 8032bfe..283c157 100644
--- a/collectors/pulte/package.json
+++ b/collectors/pulte/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/collector-pulte",
+ "name": "@homesonspec/collector-pulte",
"version": "0.1.0",
"private": true,
"type": "module",
@@ -7,9 +7,9 @@
"types": "./src/index.ts",
"scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
"dependencies": {
- "@spechomes/collectors-common": "workspace:*",
- "@spechomes/schemas": "workspace:*",
- "@spechomes/shared": "workspace:*"
+ "@homesonspec/collectors-common": "workspace:*",
+ "@homesonspec/schemas": "workspace:*",
+ "@homesonspec/shared": "workspace:*"
},
"devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
}
diff --git a/collectors/pulte/src/index.ts b/collectors/pulte/src/index.ts
index 1ce1105..c8c2973 100644
--- a/collectors/pulte/src/index.ts
+++ b/collectors/pulte/src/index.ts
@@ -1,4 +1,4 @@
-import type { ExtractedRecord, FieldValue } from "@spechomes/schemas";
+import type { ExtractedRecord, FieldValue } from "@homesonspec/schemas";
import {
fetchFixtures,
LiveFetcher,
@@ -6,7 +6,7 @@ import {
type FetchContext,
type RawPage,
type SourceAdapter,
-} from "@spechomes/collectors-common";
+} from "@homesonspec/collectors-common";
/**
* Pulte adapter — JSON_API source (recon 2026-07-23). Cleanest of the set.
diff --git a/collectors/taylor-morrison/package.json b/collectors/taylor-morrison/package.json
index 6545497..47c2927 100644
--- a/collectors/taylor-morrison/package.json
+++ b/collectors/taylor-morrison/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/collector-taylor-morrison",
+ "name": "@homesonspec/collector-taylor-morrison",
"version": "0.1.0",
"private": true,
"type": "module",
@@ -7,9 +7,9 @@
"types": "./src/index.ts",
"scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
"dependencies": {
- "@spechomes/collectors-common": "workspace:*",
- "@spechomes/schemas": "workspace:*",
- "@spechomes/shared": "workspace:*"
+ "@homesonspec/collectors-common": "workspace:*",
+ "@homesonspec/schemas": "workspace:*",
+ "@homesonspec/shared": "workspace:*"
},
"devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
}
diff --git a/collectors/taylor-morrison/src/index.ts b/collectors/taylor-morrison/src/index.ts
index 4624688..f21b216 100644
--- a/collectors/taylor-morrison/src/index.ts
+++ b/collectors/taylor-morrison/src/index.ts
@@ -1,4 +1,4 @@
-import type { ExtractedRecord, FieldValue } from "@spechomes/schemas";
+import type { ExtractedRecord, FieldValue } from "@homesonspec/schemas";
import {
fetchFixtures,
LiveFetcher,
@@ -6,7 +6,7 @@ import {
type FetchContext,
type RawPage,
type SourceAdapter,
-} from "@spechomes/collectors-common";
+} from "@homesonspec/collectors-common";
/**
* Taylor Morrison adapter — Sitecore "fedmodel" source (recon-verified 2026-07-23).
diff --git a/collectors/toll-brothers/package.json b/collectors/toll-brothers/package.json
index bdb3827..75b99f9 100644
--- a/collectors/toll-brothers/package.json
+++ b/collectors/toll-brothers/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/collector-toll-brothers",
+ "name": "@homesonspec/collector-toll-brothers",
"version": "0.1.0",
"private": true,
"type": "module",
@@ -7,9 +7,9 @@
"types": "./src/index.ts",
"scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
"dependencies": {
- "@spechomes/collectors-common": "workspace:*",
- "@spechomes/schemas": "workspace:*",
- "@spechomes/shared": "workspace:*"
+ "@homesonspec/collectors-common": "workspace:*",
+ "@homesonspec/schemas": "workspace:*",
+ "@homesonspec/shared": "workspace:*"
},
"devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
}
diff --git a/collectors/toll-brothers/src/index.ts b/collectors/toll-brothers/src/index.ts
index 2285f27..af61354 100644
--- a/collectors/toll-brothers/src/index.ts
+++ b/collectors/toll-brothers/src/index.ts
@@ -1,5 +1,5 @@
-import type { ExtractedRecord, FieldValue } from "@spechomes/schemas";
-import { normalizeStateCode } from "@spechomes/shared";
+import type { ExtractedRecord, FieldValue } from "@homesonspec/schemas";
+import { normalizeStateCode } from "@homesonspec/shared";
import {
fetchFixtures,
LiveFetcher,
@@ -7,7 +7,7 @@ import {
type FetchContext,
type RawPage,
type SourceAdapter,
-} from "@spechomes/collectors-common";
+} from "@homesonspec/collectors-common";
/**
* Toll Brothers adapter — FEED source (recon 2026-07-22).
diff --git a/collectors/tri-pointe/package.json b/collectors/tri-pointe/package.json
index e30fe5f..4258da1 100644
--- a/collectors/tri-pointe/package.json
+++ b/collectors/tri-pointe/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/collector-tri-pointe",
+ "name": "@homesonspec/collector-tri-pointe",
"version": "0.1.0",
"private": true,
"type": "module",
@@ -7,9 +7,9 @@
"types": "./src/index.ts",
"scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
"dependencies": {
- "@spechomes/collectors-common": "workspace:*",
- "@spechomes/schemas": "workspace:*",
- "@spechomes/shared": "workspace:*"
+ "@homesonspec/collectors-common": "workspace:*",
+ "@homesonspec/schemas": "workspace:*",
+ "@homesonspec/shared": "workspace:*"
},
"devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
}
diff --git a/collectors/tri-pointe/src/index.ts b/collectors/tri-pointe/src/index.ts
index 2fb90a3..bb21e82 100644
--- a/collectors/tri-pointe/src/index.ts
+++ b/collectors/tri-pointe/src/index.ts
@@ -1,4 +1,4 @@
-import type { ExtractedRecord, FieldValue } from "@spechomes/schemas";
+import type { ExtractedRecord, FieldValue } from "@homesonspec/schemas";
import {
fetchFixtures,
LiveFetcher,
@@ -6,7 +6,7 @@ import {
type FetchContext,
type RawPage,
type SourceAdapter,
-} from "@spechomes/collectors-common";
+} from "@homesonspec/collectors-common";
/**
* Tri Pointe adapter — Next.js RSC source (recon 2026-07-23).
diff --git a/deploy-full.sh b/deploy-full.sh
index a594f06..09d51e1 100644
--- a/deploy-full.sh
+++ b/deploy-full.sh
@@ -1,35 +1,35 @@
#!/usr/bin/env bash
# Full deploy for the /yolo "Open Design" run: reskin + packages/search freshness
# filter + Stage-3 verification engine + the additive DB migration.
-# ! bash ~/Projects/spechomes/deploy-full.sh
+# ! bash ~/Projects/homesonspec/deploy-full.sh
set -euo pipefail
-KH=root@45.61.58.125; REMOTE=/root/Projects/spechomes; WEB=9975
+KH=root@45.61.58.125; REMOTE=/root/Projects/homesonspec; WEB=9975
RP='export PATH=$PATH:/root/.npm-global/bin:/usr/local/bin; export $(grep -E "^DATABASE_URL=" '"$REMOTE"'/.env | head -1 | xargs)'
echo "── 1/5 ship changed source (reskin + search + workers + prisma) ──"
-rsync -az --delete ~/Projects/spechomes/apps/web/src/ $KH:$REMOTE/apps/web/src/
-rsync -az --delete ~/Projects/spechomes/packages/search/src/ $KH:$REMOTE/packages/search/src/
-rsync -az --delete ~/Projects/spechomes/packages/publisher/src/ $KH:$REMOTE/packages/publisher/src/
-rsync -az --delete ~/Projects/spechomes/packages/schemas/src/ $KH:$REMOTE/packages/schemas/src/
-rsync -az --delete ~/Projects/spechomes/apps/workers/src/ $KH:$REMOTE/apps/workers/src/
-rsync -az ~/Projects/spechomes/apps/workers/package.json $KH:$REMOTE/apps/workers/package.json
+rsync -az --delete ~/Projects/homesonspec/apps/web/src/ $KH:$REMOTE/apps/web/src/
+rsync -az --delete ~/Projects/homesonspec/packages/search/src/ $KH:$REMOTE/packages/search/src/
+rsync -az --delete ~/Projects/homesonspec/packages/publisher/src/ $KH:$REMOTE/packages/publisher/src/
+rsync -az --delete ~/Projects/homesonspec/packages/schemas/src/ $KH:$REMOTE/packages/schemas/src/
+rsync -az --delete ~/Projects/homesonspec/apps/workers/src/ $KH:$REMOTE/apps/workers/src/
+rsync -az ~/Projects/homesonspec/apps/workers/package.json $KH:$REMOTE/apps/workers/package.json
# Every collector's src — carries the extractors (image capture etc.).
-rsync -az --delete ~/Projects/spechomes/collectors/ $KH:$REMOTE/collectors/ --exclude node_modules
-rsync -az --delete ~/Projects/spechomes/packages/database/prisma/ $KH:$REMOTE/packages/database/prisma/
-rsync -az ~/Projects/spechomes/design-system/ $KH:$REMOTE/design-system/
+rsync -az --delete ~/Projects/homesonspec/collectors/ $KH:$REMOTE/collectors/ --exclude node_modules
+rsync -az --delete ~/Projects/homesonspec/packages/database/prisma/ $KH:$REMOTE/packages/database/prisma/
+rsync -az ~/Projects/homesonspec/design-system/ $KH:$REMOTE/design-system/
echo " synced"
echo "── 1.5/5 link workspace packages (new collector adapters) ──"
ssh $KH "cd $REMOTE; export PATH=\$PATH:/root/.npm-global/bin:/usr/local/bin; pnpm install --silent 2>&1 | tail -1"
echo "── 2/5 apply ADDITIVE migration to live DB (SourceRun + SourceRegistry cols) ──"
-ssh $KH "cd $REMOTE; $RP; pnpm --filter @spechomes/database exec prisma migrate deploy 2>&1 | grep -iE 'migration|applied|already|error' | head"
+ssh $KH "cd $REMOTE; $RP; pnpm --filter @homesonspec/database exec prisma migrate deploy 2>&1 | grep -iE 'migration|applied|already|error' | head"
echo "── 3/5 regenerate Prisma client ──"
-ssh $KH "cd $REMOTE; $RP; pnpm --filter @spechomes/database exec prisma generate 2>&1 | grep -iE 'Generated|error' | head -3"
+ssh $KH "cd $REMOTE; $RP; pnpm --filter @homesonspec/database exec prisma generate 2>&1 | grep -iE 'Generated|error' | head -3"
echo "── 4/5 rebuild web (must compile before restart) ──"
-BUILD=$(ssh $KH "cd $REMOTE; $RP; pnpm --filter @spechomes/web build 2>&1 | grep -iE 'Compiled successfully|Failed|Type error|error TS' | head -4")
+BUILD=$(ssh $KH "cd $REMOTE; $RP; pnpm --filter @homesonspec/web build 2>&1 | grep -iE 'Compiled successfully|Failed|Type error|error TS' | head -4")
echo "$BUILD"
if ! echo "$BUILD" | grep -qi 'Compiled successfully'; then
echo "❌ build did NOT report success — NOT restarting pm2 (old build still serving). Aborting."
@@ -38,12 +38,12 @@ fi
echo "── 5/5 restart + verify ──"
ssh $KH "cd $REMOTE; $RP
-pm2 restart spechomes-web --update-env >/dev/null; sleep 4
+pm2 restart homesonspec-web --update-env >/dev/null; sleep 4
echo -n ' local web → '; curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:$WEB/
echo -n ' /map page → '; curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:$WEB/map
echo -n ' /search page → '; curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:$WEB/search
echo -n ' /api/map count → '; curl -s http://127.0.0.1:$WEB/api/map | python3 -c 'import sys,json;d=json.load(sys.stdin);print(d[\"total\"],\"markers,\",len(d[\"builders\"]),\"builder(s)\")'
-echo -n ' verify CLI ok? → '; pnpm --filter @spechomes/workers verify -- health 2>/dev/null | python3 -c 'import sys,json;d=json.load(sys.stdin);print(len(d),\"sources tracked\")' 2>/dev/null || echo 'verify CLI FAILED'
+echo -n ' verify CLI ok? → '; pnpm --filter @homesonspec/workers verify -- health 2>/dev/null | python3 -c 'import sys,json;d=json.load(sys.stdin);print(len(d),\"sources tracked\")' 2>/dev/null || echo 'verify CLI FAILED'
echo -n ' public https → '; curl -s -o /dev/null -w '%{http_code}\n' https://homesonspec.com/map
echo -n ' font shipped? → '; curl -s http://127.0.0.1:$WEB/ | grep -oiE 'fraunces|inter' | head -1 || echo '(font name not inlined — check rendered CSS)'"
echo "✅ full deploy complete"
diff --git a/deploy-heromap.sh b/deploy-heromap.sh
index 347beda..8bf7f8b 100644
--- a/deploy-heromap.sh
+++ b/deploy-heromap.sh
@@ -1,21 +1,21 @@
#!/usr/bin/env bash
# Ship the homepage hero map to the live Kamatera site. Run:
-# ! bash ~/Projects/spechomes/deploy-heromap.sh
+# ! bash ~/Projects/homesonspec/deploy-heromap.sh
set -euo pipefail
-KH=root@45.61.58.125; REMOTE=/root/Projects/spechomes; WEB=9975
+KH=root@45.61.58.125; REMOTE=/root/Projects/homesonspec; WEB=9975
echo "── 1/3 ship changed sources ──"
-rsync -az ~/Projects/spechomes/apps/web/src/app/HeroMap.tsx \
- ~/Projects/spechomes/apps/web/src/app/page.tsx \
+rsync -az ~/Projects/homesonspec/apps/web/src/app/HeroMap.tsx \
+ ~/Projects/homesonspec/apps/web/src/app/page.tsx \
$KH:$REMOTE/apps/web/src/app/ && echo " synced HeroMap.tsx + page.tsx"
echo "── 2/3 rebuild web ──"
ssh $KH "cd $REMOTE; export PATH=\$PATH:/root/.npm-global/bin:/usr/local/bin
-pnpm --filter @spechomes/web build 2>&1 | grep -iE 'Compiled successfully|Failed|error TS|Type error' | head -4"
+pnpm --filter @homesonspec/web build 2>&1 | grep -iE 'Compiled successfully|Failed|error TS|Type error' | head -4"
echo "── 3/3 restart + verify ──"
ssh $KH "cd $REMOTE; export PATH=\$PATH:/root/.npm-global/bin:/usr/local/bin
-pm2 restart spechomes-web --update-env >/dev/null; sleep 4
+pm2 restart homesonspec-web --update-env >/dev/null; sleep 4
echo -n ' local web → '; curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:$WEB/
echo -n ' hero-map present → '; curl -s http://127.0.0.1:$WEB/ | grep -c 'data-testid=\"hero-map\"' | sed 's/^/marker-div x/'"
echo -n ' public https → '; curl -s -o /dev/null -w '%{http_code}\n' https://homesonspec.com/
diff --git a/deploy-web.sh b/deploy-web.sh
index 2fdd678..a6815da 100644
--- a/deploy-web.sh
+++ b/deploy-web.sh
@@ -1,19 +1,19 @@
#!/usr/bin/env bash
# Ship the whole apps/web source tree to the live Kamatera site, rebuild, restart.
-# ! bash ~/Projects/spechomes/deploy-web.sh
+# ! bash ~/Projects/homesonspec/deploy-web.sh
set -euo pipefail
-KH=root@45.61.58.125; REMOTE=/root/Projects/spechomes; WEB=9975
+KH=root@45.61.58.125; REMOTE=/root/Projects/homesonspec; WEB=9975
echo "── 1/3 ship apps/web/src ──"
-rsync -az --delete ~/Projects/spechomes/apps/web/src/ $KH:$REMOTE/apps/web/src/ && echo " synced apps/web/src"
+rsync -az --delete ~/Projects/homesonspec/apps/web/src/ $KH:$REMOTE/apps/web/src/ && echo " synced apps/web/src"
echo "── 2/3 rebuild web ──"
ssh $KH "cd $REMOTE; export PATH=\$PATH:/root/.npm-global/bin:/usr/local/bin
-pnpm --filter @spechomes/web build 2>&1 | grep -iE 'Compiled successfully|Failed|error TS|Type error' | head -4"
+pnpm --filter @homesonspec/web build 2>&1 | grep -iE 'Compiled successfully|Failed|error TS|Type error' | head -4"
echo "── 3/3 restart + verify ──"
ssh $KH "cd $REMOTE; export PATH=\$PATH:/root/.npm-global/bin:/usr/local/bin
-pm2 restart spechomes-web --update-env >/dev/null; sleep 4
+pm2 restart homesonspec-web --update-env >/dev/null; sleep 4
echo -n ' local web → '; curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:$WEB/
echo -n ' /map page → '; curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:$WEB/map
echo -n ' /api/map count → '; curl -s http://127.0.0.1:$WEB/api/map | python3 -c 'import sys,json;d=json.load(sys.stdin);print(d[\"total\"],\"markers,\",len(d[\"builders\"]),\"builder(s)\")'
diff --git a/docs/architecture/ADRS.md b/docs/architecture/ADRS.md
index 7e5320e..cc71291 100644
--- a/docs/architecture/ADRS.md
+++ b/docs/architecture/ADRS.md
@@ -44,7 +44,7 @@ dimensions exist in the schema at all — this is deliberate Fair Housing hygien
omission.
## ADR-007 — publisher package is the only writer of published tables
-`@spechomes/publisher.publishStagedRecord` is the single bridge from staged →
+`@homesonspec/publisher.publishStagedRecord` is the single bridge from staged →
published, and it throws on any staged status other than VALIDATED (validators passed)
or APPROVED (human review). Collectors and extractors end at `StagedRecord`. The
integration suite asserts this invariant directly.
diff --git a/docs/data-rights/POLICY.md b/docs/data-rights/POLICY.md
index 534c7d6..70aa012 100644
--- a/docs/data-rights/POLICY.md
+++ b/docs/data-rights/POLICY.md
@@ -1,4 +1,4 @@
-# SpecHomes Data Rights Policy
+# HomesOnSpec Data Rights Policy
A builder advertising a home for sale does not license its website for wholesale
copying. Individual facts (address, price, sqft, beds, availability) receive thin
diff --git a/docs/source-runbooks/meridian-homes.md b/docs/source-runbooks/meridian-homes.md
index 0968aa5..c269b64 100644
--- a/docs/source-runbooks/meridian-homes.md
+++ b/docs/source-runbooks/meridian-homes.md
@@ -7,7 +7,7 @@ fetching exists for this source.
- Registry key: `meridian-homes-fixtures` · method FIXTURE · media rights NONE
- Adapter: `collectors/meridian-homes` (extractor v1.0.0), contract-pinned by
`fixtures/expected-records/meridian-homes.json` and `src/extract.test.ts`
-- Run: `DATABASE_URL=… pnpm --filter @spechomes/workers pipeline -- --adapter=meridian-homes-fixtures`
+- Run: `DATABASE_URL=… pnpm --filter @homesonspec/workers pipeline -- --adapter=meridian-homes-fixtures`
- Page order matters: the community page sorts first (01-…), so the publish stage
creates the Community row before homes validate FK integrity.
- Known quirks encoded in fixtures: `03-home-124-silverleaf.html` has no price
diff --git a/docs/source-runbooks/toll-brothers.md b/docs/source-runbooks/toll-brothers.md
index 7f13991..92859df 100644
--- a/docs/source-runbooks/toll-brothers.md
+++ b/docs/source-runbooks/toll-brothers.md
@@ -10,6 +10,6 @@ unauthenticated community feed). Recon 2026-07-22: no bot challenge, no Crawl-de
`/new-quick-move-in-homes/...` URLs (robots-allowed), volume-controlled.
- robots constraints honored: never fetch `/siteplans/`, `/nse`, `/compare`,
`/new-homes`, `/sitesearch`.
-- Run: `pnpm --filter @spechomes/workers pipeline -- --adapter=toll-brothers-site`
+- Run: `pnpm --filter @homesonspec/workers pipeline -- --adapter=toll-brothers-site`
- Notes: feed carries no zip/street per community → those fields publish null
(never guessed); zip enrichment arrives with wave-2 QMI pages.
diff --git a/ecosystem.config.js b/ecosystem.config.js
index 143c3fd..8ec241c 100644
--- a/ecosystem.config.js
+++ b/ecosystem.config.js
@@ -2,24 +2,24 @@
module.exports = {
apps: [
{
- name: "spechomes-web",
+ name: "homesonspec-web",
cwd: __dirname,
script: "pnpm",
- args: "--filter @spechomes/web start",
+ args: "--filter @homesonspec/web start",
env: { NODE_ENV: "production", PORT: "3100" },
},
{
- name: "spechomes-admin",
+ name: "homesonspec-admin",
cwd: __dirname,
script: "pnpm",
- args: "--filter @spechomes/admin start",
+ args: "--filter @homesonspec/admin start",
env: { NODE_ENV: "production", PORT: "3101" },
},
{
// tsx-run daemon (pg-boss queue consumer). Unlike the Next apps it does
// not auto-load .env, so load the (gitignored) root .env via node's
// --env-file — keeps DATABASE_URL out of this committed file.
- name: "spechomes-workers",
+ name: "homesonspec-workers",
cwd: __dirname + "/apps/workers",
script: "src/index.ts",
interpreter: "node",
diff --git a/package.json b/package.json
index 2c6663b..c45dff8 100644
--- a/package.json
+++ b/package.json
@@ -1,21 +1,21 @@
{
- "name": "spechomes",
+ "name": "homesonspec",
"version": "0.3.0",
"private": true,
- "description": "SpecHomes.com — nationwide search and comparison platform for newly constructed homes. Evidence-backed, verification-labeled inventory.",
+ "description": "HomesOnSpec.com — nationwide search and comparison platform for newly constructed homes. Evidence-backed, verification-labeled inventory.",
"scripts": {
- "dev:web": "pnpm --filter @spechomes/web dev",
- "dev:admin": "pnpm --filter @spechomes/admin dev",
+ "dev:web": "pnpm --filter @homesonspec/web dev",
+ "dev:admin": "pnpm --filter @homesonspec/admin dev",
"build": "pnpm -r build",
"test": "pnpm -r --no-bail test",
"typecheck": "pnpm -r typecheck",
- "db:migrate": "pnpm --filter @spechomes/database db:migrate",
- "db:seed": "pnpm --filter @spechomes/database db:seed",
- "pipeline": "pnpm --filter @spechomes/workers pipeline",
+ "db:migrate": "pnpm --filter @homesonspec/database db:migrate",
+ "db:seed": "pnpm --filter @homesonspec/database db:seed",
+ "pipeline": "pnpm --filter @homesonspec/workers pipeline",
"e2e": "playwright test",
- "redeploy:web": "pnpm --filter @spechomes/web build && pm2 restart spechomes-web",
- "redeploy:admin": "pnpm --filter @spechomes/admin build && pm2 restart spechomes-admin",
- "redeploy": "pnpm --filter @spechomes/web --filter @spechomes/admin build && pm2 restart spechomes-web spechomes-admin"
+ "redeploy:web": "pnpm --filter @homesonspec/web build && pm2 restart homesonspec-web",
+ "redeploy:admin": "pnpm --filter @homesonspec/admin build && pm2 restart homesonspec-admin",
+ "redeploy": "pnpm --filter @homesonspec/web --filter @homesonspec/admin build && pm2 restart homesonspec-web homesonspec-admin"
},
"devDependencies": {
"@playwright/test": "^1.49.1",
diff --git a/packages/database/package.json b/packages/database/package.json
index f596b07..6e096bf 100644
--- a/packages/database/package.json
+++ b/packages/database/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/database",
+ "name": "@homesonspec/database",
"version": "0.1.0",
"private": true,
"type": "module",
diff --git a/packages/database/prisma/schema.prisma b/packages/database/prisma/schema.prisma
index 6a3336c..ed4e9cd 100644
--- a/packages/database/prisma/schema.prisma
+++ b/packages/database/prisma/schema.prisma
@@ -1,4 +1,4 @@
-// SpecHomes data model.
+// HomesOnSpec data model.
//
// Two strictly separated sides:
// PUBLISHED side — consumer-facing tables. Only the publish pipeline stage
diff --git a/packages/database/prisma/seed.ts b/packages/database/prisma/seed.ts
index f317885..3cec1c8 100644
--- a/packages/database/prisma/seed.ts
+++ b/packages/database/prisma/seed.ts
@@ -26,7 +26,7 @@ function between(min: number, max: number): number {
return min + rand() * (max - min);
}
-const DEMO_SOURCE_URL = "https://demo.spechomes.local/synthetic";
+const DEMO_SOURCE_URL = "https://demo.homesonspec.local/synthetic";
interface MarketSpec {
metro: string;
diff --git a/packages/publisher/package.json b/packages/publisher/package.json
index e3723bc..e31349d 100644
--- a/packages/publisher/package.json
+++ b/packages/publisher/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/publisher",
+ "name": "@homesonspec/publisher",
"version": "0.1.0",
"private": true,
"type": "module",
@@ -7,8 +7,8 @@
"types": "./src/index.ts",
"scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
"dependencies": {
- "@spechomes/database": "workspace:*",
- "@spechomes/shared": "workspace:*"
+ "@homesonspec/database": "workspace:*",
+ "@homesonspec/shared": "workspace:*"
},
"devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
}
diff --git a/packages/publisher/src/index.ts b/packages/publisher/src/index.ts
index fbbb9c5..6d73084 100644
--- a/packages/publisher/src/index.ts
+++ b/packages/publisher/src/index.ts
@@ -1,5 +1,5 @@
-import { prisma, type CollectionMethod, type VerificationLabel } from "@spechomes/database";
-import { normalizeAddress } from "@spechomes/shared";
+import { prisma, type CollectionMethod, type VerificationLabel } from "@homesonspec/database";
+import { normalizeAddress } from "@homesonspec/shared";
/**
* THE ONLY WRITER OF PUBLISHED TABLES.
diff --git a/packages/schemas/package.json b/packages/schemas/package.json
index d908071..255076c 100644
--- a/packages/schemas/package.json
+++ b/packages/schemas/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/schemas",
+ "name": "@homesonspec/schemas",
"version": "0.1.0",
"private": true,
"type": "module",
diff --git a/packages/search/package.json b/packages/search/package.json
index 93a3dd4..c268f11 100644
--- a/packages/search/package.json
+++ b/packages/search/package.json
@@ -1,11 +1,11 @@
{
- "name": "@spechomes/search",
+ "name": "@homesonspec/search",
"version": "0.1.0",
"private": true,
"type": "module",
"main": "./src/index.ts",
"types": "./src/index.ts",
"scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
- "dependencies": { "@spechomes/database": "workspace:*", "@spechomes/shared": "workspace:*" },
+ "dependencies": { "@homesonspec/database": "workspace:*", "@homesonspec/shared": "workspace:*" },
"devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
}
diff --git a/packages/search/src/index.ts b/packages/search/src/index.ts
index 173891d..c14fea1 100644
--- a/packages/search/src/index.ts
+++ b/packages/search/src/index.ts
@@ -1,5 +1,5 @@
-import { prisma, Prisma } from "@spechomes/database";
-import { bboxAround, type BBox } from "@spechomes/shared";
+import { prisma, Prisma } from "@homesonspec/database";
+import { bboxAround, type BBox } from "@homesonspec/shared";
/**
* Search v1 — two steps:
diff --git a/packages/shared-ui/package.json b/packages/shared-ui/package.json
index 60e9546..8bc9c0d 100644
--- a/packages/shared-ui/package.json
+++ b/packages/shared-ui/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/shared-ui",
+ "name": "@homesonspec/shared-ui",
"version": "0.1.0",
"private": true,
"type": "module",
diff --git a/packages/shared-ui/src/index.ts b/packages/shared-ui/src/index.ts
index c98d724..57018ae 100644
--- a/packages/shared-ui/src/index.ts
+++ b/packages/shared-ui/src/index.ts
@@ -1,4 +1,4 @@
// MapView is deliberately NOT re-exported here: react-leaflet touches
// `window` at module scope, so the barrel must stay SSR-safe. Import it
-// directly via `@spechomes/shared-ui/src/MapView` behind next/dynamic.
+// directly via `@homesonspec/shared-ui/src/MapView` behind next/dynamic.
export * from "./badges";
diff --git a/packages/shared/package.json b/packages/shared/package.json
index f49e00f..7bc285a 100644
--- a/packages/shared/package.json
+++ b/packages/shared/package.json
@@ -1,5 +1,5 @@
{
- "name": "@spechomes/shared",
+ "name": "@homesonspec/shared",
"version": "0.1.0",
"private": true,
"type": "module",
diff --git a/packages/source-registry/package.json b/packages/source-registry/package.json
index 45acda9..2ff319d 100644
--- a/packages/source-registry/package.json
+++ b/packages/source-registry/package.json
@@ -1,11 +1,11 @@
{
- "name": "@spechomes/source-registry",
+ "name": "@homesonspec/source-registry",
"version": "0.1.0",
"private": true,
"type": "module",
"main": "./src/index.ts",
"types": "./src/index.ts",
"scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
- "dependencies": { "@spechomes/database": "workspace:*", "zod": "^3.24.1" },
+ "dependencies": { "@homesonspec/database": "workspace:*", "zod": "^3.24.1" },
"devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
}
diff --git a/packages/validation/package.json b/packages/validation/package.json
index 1ae8f46..24f7f5e 100644
--- a/packages/validation/package.json
+++ b/packages/validation/package.json
@@ -1,11 +1,11 @@
{
- "name": "@spechomes/validation",
+ "name": "@homesonspec/validation",
"version": "0.1.0",
"private": true,
"type": "module",
"main": "./src/index.ts",
"types": "./src/index.ts",
"scripts": { "test": "vitest run --passWithNoTests", "typecheck": "tsc --noEmit" },
- "dependencies": { "@spechomes/schemas": "workspace:*", "@spechomes/shared": "workspace:*", "@spechomes/database": "workspace:*" },
+ "dependencies": { "@homesonspec/schemas": "workspace:*", "@homesonspec/shared": "workspace:*", "@homesonspec/database": "workspace:*" },
"devDependencies": { "typescript": "^5.7.2", "vitest": "^4.0.0", "@types/node": "^22.10.5" }
}
diff --git a/packages/validation/src/rules.ts b/packages/validation/src/rules.ts
index a84a28c..9d23dfa 100644
--- a/packages/validation/src/rules.ts
+++ b/packages/validation/src/rules.ts
@@ -1,4 +1,4 @@
-import { latLonInState, stateForZip } from "@spechomes/shared";
+import { latLonInState, stateForZip } from "@homesonspec/shared";
import { fieldValue, type StagedCandidate, type ValidationRule } from "./types";
export const VALIDATOR_VERSION = "1.0.0";
@@ -118,7 +118,7 @@ export const noDuplicateActiveAddress: ValidationRule = {
async check(record, ctx) {
const address = record.canonicalHints.address;
if (!address) return { passed: true };
- const { normalizeAddress } = await import("@spechomes/shared");
+ const { normalizeAddress } = await import("@homesonspec/shared");
const normalized = normalizeAddress(address);
if (!normalized) return { passed: true };
// Scoped to the same zip — an identical street string in another city
diff --git a/packages/validation/src/types.ts b/packages/validation/src/types.ts
index 5598622..0ef0ad1 100644
--- a/packages/validation/src/types.ts
+++ b/packages/validation/src/types.ts
@@ -1,4 +1,4 @@
-import type { ExtractedEntityType, ExtractedRecord } from "@spechomes/schemas";
+import type { ExtractedEntityType, ExtractedRecord } from "@homesonspec/schemas";
/**
* Deterministic validation layer. Rules — not the LLM — decide whether a
diff --git a/playwright.config.ts b/playwright.config.ts
index b476e73..6c80607 100644
--- a/playwright.config.ts
+++ b/playwright.config.ts
@@ -9,13 +9,13 @@ export default defineConfig({
},
webServer: [
{
- command: "pnpm --filter @spechomes/web dev",
+ command: "pnpm --filter @homesonspec/web dev",
url: "http://localhost:3100",
reuseExistingServer: true,
timeout: 60_000,
},
{
- command: "pnpm --filter @spechomes/admin dev",
+ command: "pnpm --filter @homesonspec/admin dev",
url: "http://localhost:3101",
reuseExistingServer: true,
timeout: 60_000,
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8d6ad8c..18659fc 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -17,22 +17,22 @@ importers:
apps/admin:
dependencies:
- '@spechomes/database':
+ '@homesonspec/database':
specifier: workspace:*
version: link:../../packages/database
- '@spechomes/publisher':
+ '@homesonspec/publisher':
specifier: workspace:*
version: link:../../packages/publisher
- '@spechomes/schemas':
+ '@homesonspec/schemas':
specifier: workspace:*
version: link:../../packages/schemas
- '@spechomes/search':
+ '@homesonspec/search':
specifier: workspace:*
version: link:../../packages/search
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../../packages/shared
- '@spechomes/shared-ui':
+ '@homesonspec/shared-ui':
specifier: workspace:*
version: link:../../packages/shared-ui
leaflet:
@@ -81,19 +81,19 @@ importers:
apps/web:
dependencies:
- '@spechomes/database':
+ '@homesonspec/database':
specifier: workspace:*
version: link:../../packages/database
- '@spechomes/schemas':
+ '@homesonspec/schemas':
specifier: workspace:*
version: link:../../packages/schemas
- '@spechomes/search':
+ '@homesonspec/search':
specifier: workspace:*
version: link:../../packages/search
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../../packages/shared
- '@spechomes/shared-ui':
+ '@homesonspec/shared-ui':
specifier: workspace:*
version: link:../../packages/shared-ui
leaflet:
@@ -142,46 +142,46 @@ importers:
apps/workers:
dependencies:
- '@spechomes/collector-dr-horton':
+ '@homesonspec/collector-dr-horton':
specifier: workspace:*
version: link:../../collectors/dr-horton
- '@spechomes/collector-kb-home':
+ '@homesonspec/collector-kb-home':
specifier: workspace:*
version: link:../../collectors/kb-home
- '@spechomes/collector-lennar':
+ '@homesonspec/collector-lennar':
specifier: workspace:*
version: link:../../collectors/lennar
- '@spechomes/collector-meridian-homes':
+ '@homesonspec/collector-meridian-homes':
specifier: workspace:*
version: link:../../collectors/meridian-homes
- '@spechomes/collector-pulte':
+ '@homesonspec/collector-pulte':
specifier: workspace:*
version: link:../../collectors/pulte
- '@spechomes/collector-taylor-morrison':
+ '@homesonspec/collector-taylor-morrison':
specifier: workspace:*
version: link:../../collectors/taylor-morrison
- '@spechomes/collector-toll-brothers':
+ '@homesonspec/collector-toll-brothers':
specifier: workspace:*
version: link:../../collectors/toll-brothers
- '@spechomes/collector-tri-pointe':
+ '@homesonspec/collector-tri-pointe':
specifier: workspace:*
version: link:../../collectors/tri-pointe
- '@spechomes/collectors-common':
+ '@homesonspec/collectors-common':
specifier: workspace:*
version: link:../../collectors/common
- '@spechomes/database':
+ '@homesonspec/database':
specifier: workspace:*
version: link:../../packages/database
- '@spechomes/publisher':
+ '@homesonspec/publisher':
specifier: workspace:*
version: link:../../packages/publisher
- '@spechomes/schemas':
+ '@homesonspec/schemas':
specifier: workspace:*
version: link:../../packages/schemas
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../../packages/shared
- '@spechomes/validation':
+ '@homesonspec/validation':
specifier: workspace:*
version: link:../../packages/validation
pg-boss:
@@ -203,10 +203,10 @@ importers:
collectors/common:
dependencies:
- '@spechomes/schemas':
+ '@homesonspec/schemas':
specifier: workspace:*
version: link:../../packages/schemas
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../../packages/shared
node-html-parser:
@@ -225,13 +225,13 @@ importers:
collectors/dr-horton:
dependencies:
- '@spechomes/collectors-common':
+ '@homesonspec/collectors-common':
specifier: workspace:*
version: link:../common
- '@spechomes/schemas':
+ '@homesonspec/schemas':
specifier: workspace:*
version: link:../../packages/schemas
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../../packages/shared
devDependencies:
@@ -247,13 +247,13 @@ importers:
collectors/dream-finders:
dependencies:
- '@spechomes/collectors-common':
+ '@homesonspec/collectors-common':
specifier: workspace:*
version: link:../common
- '@spechomes/schemas':
+ '@homesonspec/schemas':
specifier: workspace:*
version: link:../../packages/schemas
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../../packages/shared
devDependencies:
@@ -269,13 +269,13 @@ importers:
collectors/kb-home:
dependencies:
- '@spechomes/collectors-common':
+ '@homesonspec/collectors-common':
specifier: workspace:*
version: link:../common
- '@spechomes/schemas':
+ '@homesonspec/schemas':
specifier: workspace:*
version: link:../../packages/schemas
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../../packages/shared
devDependencies:
@@ -291,13 +291,13 @@ importers:
collectors/lennar:
dependencies:
- '@spechomes/collectors-common':
+ '@homesonspec/collectors-common':
specifier: workspace:*
version: link:../common
- '@spechomes/schemas':
+ '@homesonspec/schemas':
specifier: workspace:*
version: link:../../packages/schemas
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../../packages/shared
devDependencies:
@@ -313,13 +313,13 @@ importers:
collectors/meridian-homes:
dependencies:
- '@spechomes/collectors-common':
+ '@homesonspec/collectors-common':
specifier: workspace:*
version: link:../common
- '@spechomes/schemas':
+ '@homesonspec/schemas':
specifier: workspace:*
version: link:../../packages/schemas
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../../packages/shared
node-html-parser:
@@ -338,13 +338,13 @@ importers:
collectors/pulte:
dependencies:
- '@spechomes/collectors-common':
+ '@homesonspec/collectors-common':
specifier: workspace:*
version: link:../common
- '@spechomes/schemas':
+ '@homesonspec/schemas':
specifier: workspace:*
version: link:../../packages/schemas
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../../packages/shared
devDependencies:
@@ -360,13 +360,13 @@ importers:
collectors/taylor-morrison:
dependencies:
- '@spechomes/collectors-common':
+ '@homesonspec/collectors-common':
specifier: workspace:*
version: link:../common
- '@spechomes/schemas':
+ '@homesonspec/schemas':
specifier: workspace:*
version: link:../../packages/schemas
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../../packages/shared
devDependencies:
@@ -382,13 +382,13 @@ importers:
collectors/toll-brothers:
dependencies:
- '@spechomes/collectors-common':
+ '@homesonspec/collectors-common':
specifier: workspace:*
version: link:../common
- '@spechomes/schemas':
+ '@homesonspec/schemas':
specifier: workspace:*
version: link:../../packages/schemas
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../../packages/shared
devDependencies:
@@ -404,13 +404,13 @@ importers:
collectors/tri-pointe:
dependencies:
- '@spechomes/collectors-common':
+ '@homesonspec/collectors-common':
specifier: workspace:*
version: link:../common
- '@spechomes/schemas':
+ '@homesonspec/schemas':
specifier: workspace:*
version: link:../../packages/schemas
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../../packages/shared
devDependencies:
@@ -448,10 +448,10 @@ importers:
packages/publisher:
dependencies:
- '@spechomes/database':
+ '@homesonspec/database':
specifier: workspace:*
version: link:../database
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../shared
devDependencies:
@@ -483,10 +483,10 @@ importers:
packages/search:
dependencies:
- '@spechomes/database':
+ '@homesonspec/database':
specifier: workspace:*
version: link:../database
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../shared
devDependencies:
@@ -549,7 +549,7 @@ importers:
packages/source-registry:
dependencies:
- '@spechomes/database':
+ '@homesonspec/database':
specifier: workspace:*
version: link:../database
zod:
@@ -568,13 +568,13 @@ importers:
packages/validation:
dependencies:
- '@spechomes/database':
+ '@homesonspec/database':
specifier: workspace:*
version: link:../database
- '@spechomes/schemas':
+ '@homesonspec/schemas':
specifier: workspace:*
version: link:../schemas
- '@spechomes/shared':
+ '@homesonspec/shared':
specifier: workspace:*
version: link:../shared
devDependencies:
diff --git a/tsconfig.base.json b/tsconfig.base.json
index 7a4f65a..37e3159 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -18,31 +18,31 @@
"jsx": "preserve",
"baseUrl": ".",
"paths": {
- "@spechomes/database": [
+ "@homesonspec/database": [
"packages/database/src/index.ts"
],
- "@spechomes/schemas": [
+ "@homesonspec/schemas": [
"packages/schemas/src/index.ts"
],
- "@spechomes/validation": [
+ "@homesonspec/validation": [
"packages/validation/src/index.ts"
],
- "@spechomes/search": [
+ "@homesonspec/search": [
"packages/search/src/index.ts"
],
- "@spechomes/source-registry": [
+ "@homesonspec/source-registry": [
"packages/source-registry/src/index.ts"
],
- "@spechomes/shared": [
+ "@homesonspec/shared": [
"packages/shared/src/index.ts"
],
- "@spechomes/shared-ui": [
+ "@homesonspec/shared-ui": [
"packages/shared-ui/src/index.ts"
],
- "@spechomes/collectors-common": [
+ "@homesonspec/collectors-common": [
"collectors/common/src/index.ts"
],
- "@spechomes/publisher": [
+ "@homesonspec/publisher": [
"packages/publisher/src/index.ts"
]
}
← ff7f593 Scrub non-owned domain spechomes.com -> homesonspec.com (Lay
·
back to Homesonspec
·
chore: v0.3.1 (session close — spechomes→homesonspec rename) ce2edb5 →