open-local-audit 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/profiles.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { load } from "cheerio";
1
2
  export const auditProfiles = ["generic", "dental", "beauty", "restaurant", "contractor"];
2
3
  const profileOverrides = {
3
4
  dental: {
@@ -25,12 +26,156 @@ const profileOverrides = {
25
26
  }
26
27
  }
27
28
  };
28
- export function applyProfileAdjustments(findings, profile) {
29
+ function hasAction($, pattern) {
30
+ return $("a, button")
31
+ .toArray()
32
+ .some((element) => {
33
+ const href = $(element).attr("href") ?? "";
34
+ const label = $(element).attr("aria-label") ?? "";
35
+ const text = $(element).text();
36
+ return pattern.test(`${href} ${label} ${text}`);
37
+ });
38
+ }
39
+ function hasPageSignal($, text, pattern) {
40
+ const attributes = $("[href], [aria-label], [alt], [title], [class], [id]")
41
+ .toArray()
42
+ .map((element) => [
43
+ $(element).attr("href"),
44
+ $(element).attr("aria-label"),
45
+ $(element).attr("alt"),
46
+ $(element).attr("title"),
47
+ $(element).attr("class"),
48
+ $(element).attr("id")
49
+ ]
50
+ .filter(Boolean)
51
+ .join(" "))
52
+ .join(" ");
53
+ return pattern.test(`${text} ${attributes}`);
54
+ }
55
+ function createFinding(rule) {
56
+ return {
57
+ id: rule.id,
58
+ title: rule.title,
59
+ severity: rule.severity,
60
+ category: rule.category,
61
+ source: rule.source,
62
+ recommendation: rule.recommendation,
63
+ evidence: [
64
+ {
65
+ label: rule.source,
66
+ value: rule.evidence
67
+ }
68
+ ]
69
+ };
70
+ }
71
+ const profileFindingRules = {
72
+ dental: [
73
+ {
74
+ id: "dental-appointment-cta",
75
+ title: "Dental appointment CTA is missing",
76
+ category: "trust-contact",
77
+ severity: "medium",
78
+ source: "dental profile",
79
+ recommendation: "Add a clear appointment CTA for new patients, such as booking, scheduling, or consultation.",
80
+ isPresent: ({ $ }) => hasAction($, /\b(book|schedule|appointment|consultation|new patient)\b/i),
81
+ evidence: "No dental appointment, scheduling, or consultation CTA found"
82
+ },
83
+ {
84
+ id: "dental-insurance-payment-cue",
85
+ title: "Dental insurance or payment cue is missing",
86
+ category: "trust-contact",
87
+ severity: "low",
88
+ source: "dental profile",
89
+ recommendation: "Mention accepted insurance, payment plans, or financing so patients can qualify cost expectations.",
90
+ isPresent: ({ text }) => /\b(insurance|insured|payment plans?|financing|finance|medicaid|medicare)\b/i.test(text),
91
+ evidence: "No dental insurance, payment plan, or financing cue found"
92
+ }
93
+ ],
94
+ beauty: [
95
+ {
96
+ id: "beauty-booking-cta",
97
+ title: "Beauty booking CTA is missing",
98
+ category: "trust-contact",
99
+ severity: "medium",
100
+ source: "beauty profile",
101
+ recommendation: "Add a service booking CTA so visitors can quickly reserve a salon or beauty appointment.",
102
+ isPresent: ({ $ }) => hasAction($, /\b(book|booking|schedule|appointment|reserve)\b/i),
103
+ evidence: "No beauty booking or appointment CTA found"
104
+ },
105
+ {
106
+ id: "beauty-portfolio-signal",
107
+ title: "Beauty portfolio or gallery signal is missing",
108
+ category: "trust-contact",
109
+ severity: "medium",
110
+ source: "beauty profile",
111
+ recommendation: "Show a gallery, portfolio, or before-and-after examples so visitors can judge service quality.",
112
+ isPresent: ({ $, text }) => hasPageSignal($, text, /\b(gallery|portfolio|before\s*(?:and|&|-)?\s*after|results?|photos?)\b/i),
113
+ evidence: "No gallery, portfolio, or before-and-after signal found"
114
+ }
115
+ ],
116
+ restaurant: [
117
+ {
118
+ id: "restaurant-menu-signal",
119
+ title: "Restaurant menu signal is missing",
120
+ category: "trust-contact",
121
+ severity: "high",
122
+ source: "restaurant profile",
123
+ recommendation: "Add a visible menu link or menu section so diners can evaluate the restaurant before visiting.",
124
+ isPresent: ({ $, text }) => hasPageSignal($, text, /\b(menu|dishes|food list|wine list|drinks?)\b/i),
125
+ evidence: "No menu link, menu section, or menu wording found"
126
+ },
127
+ {
128
+ id: "restaurant-reservation-order-signal",
129
+ title: "Restaurant reservation or ordering signal is missing",
130
+ category: "trust-contact",
131
+ severity: "medium",
132
+ source: "restaurant profile",
133
+ recommendation: "Add reservation, online ordering, delivery, or takeout options where they are available.",
134
+ isPresent: ({ $, text }) => hasPageSignal($, text, /\b(reservations?|reserve|order online|delivery|takeout|take-out|pickup)\b/i),
135
+ evidence: "No reservation, ordering, delivery, or takeout signal found"
136
+ }
137
+ ],
138
+ contractor: [
139
+ {
140
+ id: "contractor-estimate-cta",
141
+ title: "Contractor estimate CTA is missing",
142
+ category: "trust-contact",
143
+ severity: "high",
144
+ source: "contractor profile",
145
+ recommendation: "Add a quote or estimate CTA so project leads know the next step to request work.",
146
+ isPresent: ({ $ }) => hasAction($, /\b(estimate|quote|bid|consultation|request|schedule)\b/i),
147
+ evidence: "No quote, estimate, or consultation CTA found"
148
+ },
149
+ {
150
+ id: "contractor-license-insured-service-area-cue",
151
+ title: "Contractor license, insurance, or service-area cue is missing",
152
+ category: "trust-contact",
153
+ severity: "medium",
154
+ source: "contractor profile",
155
+ recommendation: "Mention license, insurance, bonding, and service-area coverage to build contractor trust.",
156
+ isPresent: ({ text }) => /\b(licensed|license|insured|insurance|bonded)\b/i.test(text) &&
157
+ /\b(service area|serving|serves|coverage area|available in)\b/i.test(text),
158
+ evidence: "No combined license, insurance, and service-area cue found"
159
+ }
160
+ ]
161
+ };
162
+ function profileFindings(profile, snapshot) {
163
+ if (profile === "generic" || !snapshot) {
164
+ return [];
165
+ }
166
+ const $ = load(snapshot.html);
167
+ const context = {
168
+ $,
169
+ text: $("body").text().replace(/\s+/g, " ").trim()
170
+ };
171
+ return profileFindingRules[profile].filter((rule) => !rule.isPresent(context)).map(createFinding);
172
+ }
173
+ export function applyProfileAdjustments(findings, profile, snapshot) {
29
174
  if (profile === "generic") {
30
175
  return findings;
31
176
  }
32
177
  const overrides = profileOverrides[profile];
33
- return findings.map((finding) => {
178
+ const adjustedFindings = findings.map((finding) => {
34
179
  const override = overrides[finding.id];
35
180
  if (!override) {
36
181
  return finding;
@@ -41,5 +186,6 @@ export function applyProfileAdjustments(findings, profile) {
41
186
  recommendation: override.recommendation ?? finding.recommendation
42
187
  };
43
188
  });
189
+ return [...adjustedFindings, ...profileFindings(profile, snapshot)];
44
190
  }
45
191
  //# sourceMappingURL=profiles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;AAOzG,MAAM,gBAAgB,GAA8E;IAClG,MAAM,EAAE;QACN,oBAAoB,EAAE;YACpB,QAAQ,EAAE,QAAQ;YAClB,cAAc,EAAE,2FAA2F;SAC5G;KACF;IACD,MAAM,EAAE;QACN,oBAAoB,EAAE;YACpB,QAAQ,EAAE,QAAQ;YAClB,cAAc,EAAE,kGAAkG;SACnH;KACF;IACD,UAAU,EAAE;QACV,uBAAuB,EAAE;YACvB,QAAQ,EAAE,QAAQ;YAClB,cAAc,EAAE,qFAAqF;SACtG;KACF;IACD,UAAU,EAAE;QACV,sBAAsB,EAAE;YACtB,QAAQ,EAAE,MAAM;YAChB,cAAc,EAAE,2GAA2G;SAC5H;KACF;CACF,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,QAAmB,EAAE,OAAqB;IAChF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,OAAO;YACL,GAAG,OAAO;YACV,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ;YAC/C,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,OAAO,CAAC,cAAc;SAClE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"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"}
package/dist/schema.d.ts CHANGED
@@ -4,6 +4,7 @@ export declare const outputFormatSchema: z.ZodEnum<["json", "markdown", "html",
4
4
  export declare const failOnSchema: z.ZodEnum<["none", "high", "medium", "low"]>;
5
5
  export declare const batchIndexSortSchema: z.ZodEnum<["score-asc", "severity-desc"]>;
6
6
  export declare const auditProfileSchema: z.ZodEnum<["generic", "dental", "beauty", "restaurant", "contractor"]>;
7
+ export declare const discoveryProviderSchema: z.ZodEnum<["manual-csv", "google-places"]>;
7
8
  export declare const cliOptionsSchema: z.ZodObject<{
8
9
  format: z.ZodDefault<z.ZodEnum<["json", "markdown", "html", "all"]>>;
9
10
  out: z.ZodOptional<z.ZodString>;
@@ -13,8 +14,11 @@ export declare const cliOptionsSchema: z.ZodObject<{
13
14
  minScore: z.ZodOptional<z.ZodNumber>;
14
15
  top: z.ZodOptional<z.ZodNumber>;
15
16
  sort: z.ZodOptional<z.ZodEnum<["score-asc", "severity-desc"]>>;
17
+ concurrency: z.ZodDefault<z.ZodNumber>;
16
18
  profile: z.ZodDefault<z.ZodEnum<["generic", "dental", "beauty", "restaurant", "contractor"]>>;
17
19
  exportCsv: z.ZodOptional<z.ZodString>;
20
+ provider: z.ZodDefault<z.ZodEnum<["manual-csv", "google-places"]>>;
21
+ dryRun: z.ZodDefault<z.ZodBoolean>;
18
22
  timeout: z.ZodDefault<z.ZodNumber>;
19
23
  maxRedirects: z.ZodDefault<z.ZodNumber>;
20
24
  checkLinks: z.ZodDefault<z.ZodBoolean>;
@@ -31,6 +35,9 @@ export declare const cliOptionsSchema: z.ZodObject<{
31
35
  profile: "generic" | "dental" | "beauty" | "restaurant" | "contractor";
32
36
  render: boolean;
33
37
  format: "html" | "json" | "markdown" | "all";
38
+ concurrency: number;
39
+ provider: "manual-csv" | "google-places";
40
+ dryRun: boolean;
34
41
  timeout: number;
35
42
  failOn: "high" | "medium" | "low" | "none";
36
43
  pretty: boolean;
@@ -57,7 +64,10 @@ export declare const cliOptionsSchema: z.ZodObject<{
57
64
  segment?: string | undefined;
58
65
  minScore?: number | undefined;
59
66
  top?: number | undefined;
67
+ concurrency?: number | undefined;
60
68
  exportCsv?: string | undefined;
69
+ provider?: "manual-csv" | "google-places" | undefined;
70
+ dryRun?: boolean | undefined;
61
71
  timeout?: number | undefined;
62
72
  failOn?: "high" | "medium" | "low" | "none" | undefined;
63
73
  pretty?: boolean | undefined;
package/dist/schema.js CHANGED
@@ -17,6 +17,7 @@ export const outputFormatSchema = z.enum(["json", "markdown", "html", "all"]);
17
17
  export const failOnSchema = z.enum(["none", "high", "medium", "low"]);
18
18
  export const batchIndexSortSchema = z.enum(["score-asc", "severity-desc"]);
19
19
  export const auditProfileSchema = z.enum(["generic", "dental", "beauty", "restaurant", "contractor"]);
20
+ export const discoveryProviderSchema = z.enum(["manual-csv", "google-places"]);
20
21
  export const cliOptionsSchema = z.object({
21
22
  format: outputFormatSchema.default("markdown"),
22
23
  out: z.string().optional(),
@@ -26,8 +27,11 @@ export const cliOptionsSchema = z.object({
26
27
  minScore: z.coerce.number().min(0).max(100).optional(),
27
28
  top: z.coerce.number().int().positive().optional(),
28
29
  sort: batchIndexSortSchema.optional(),
30
+ concurrency: z.coerce.number().int().positive().default(1),
29
31
  profile: auditProfileSchema.default("generic"),
30
32
  exportCsv: z.string().optional(),
33
+ provider: discoveryProviderSchema.default("manual-csv"),
34
+ dryRun: z.boolean().default(false),
31
35
  timeout: z.coerce.number().int().positive().max(60000).default(10000),
32
36
  maxRedirects: z.coerce.number().int().min(0).max(10).default(5),
33
37
  checkLinks: z.boolean().default(false),
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-local-audit",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "Open-source website and local presence auditor for small businesses.",
5
5
  "license": "MIT",
6
6
  "type": "module",