Skip to content

Commit 73cac92

Browse files
author
xyjk
committed
Make the service funnel answer CSV reconciliation searches
Add an indexable CSV reconciliation checklist that gives visitors a concrete brief and routes them to the public quote issue. Keep it inside the existing GitHub Pages asset so outreach does not depend on third-party posting or login. Constraint: external platform posting needs account login and can become spam if done cold. Rejected: cold-posting service ads across GitHub, Reddit, or Stack Overflow | high platform-risk and low trust without a specific technical contribution. Confidence: high Scope-risk: narrow Directive: Keep public CTAs routed through the sanitized GitHub intake issue unless a user-authorized checkout/contact channel is added. Tested: local HTTP root and guide returned 200; guide linked to issues/1 and not issues/new; sitemap XML parsed; git diff --check passed. Not-tested: browser screenshot QA was skipped because Playwright is not installed in the current Node environment.
1 parent f4cc0b7 commit 73cac92

5 files changed

Lines changed: 194 additions & 0 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ repository.
1919

2020
- CSV kit preview:
2121
https://xyjk0511.github.io/codex-services-portfolio/csv-kit/
22+
- CSV reconciliation checklist:
23+
https://xyjk0511.github.io/codex-services-portfolio/guides/csv-reconciliation-checklist.html
2224
- Sample JSON summary:
2325
https://xyjk0511.github.io/codex-services-portfolio/csv-kit/sample-output/summary.json
2426
- Sample mismatch CSV:
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1">
6+
<title>CSV Reconciliation Checklist for Small Teams</title>
7+
<meta
8+
name="description"
9+
content="A practical checklist for comparing two CSV or Excel exports, catching missing rows, duplicates, and field mismatches before reporting."
10+
>
11+
<meta name="robots" content="index,follow">
12+
<link rel="canonical" href="https://xyjk0511.github.io/codex-services-portfolio/guides/csv-reconciliation-checklist.html">
13+
<meta property="og:title" content="CSV Reconciliation Checklist for Small Teams">
14+
<meta property="og:description" content="A practical CSV and Excel reconciliation checklist with a copy-paste brief for requesting a fixed-scope automation script.">
15+
<meta property="og:type" content="article">
16+
<meta property="og:url" content="https://xyjk0511.github.io/codex-services-portfolio/guides/csv-reconciliation-checklist.html">
17+
<meta property="og:image" content="https://xyjk0511.github.io/codex-services-portfolio/assets/csv-kit-cover-1600x900.png">
18+
<meta name="twitter:card" content="summary_large_image">
19+
<meta name="twitter:title" content="CSV Reconciliation Checklist for Small Teams">
20+
<meta name="twitter:description" content="A practical checklist for catching missing rows, duplicates, and mismatches in CSV or Excel exports.">
21+
<meta name="twitter:image" content="https://xyjk0511.github.io/codex-services-portfolio/assets/csv-kit-cover-1600x900.png">
22+
<link rel="stylesheet" href="../styles.css">
23+
</head>
24+
<body>
25+
<main>
26+
<article class="article-page">
27+
<a class="text-link" href="../index.html">Back to services</a>
28+
<p class="eyebrow">CSV and Excel automation</p>
29+
<h1>CSV reconciliation checklist for small teams.</h1>
30+
<p class="lede">
31+
Use this when two exports should agree but the totals, row counts, or
32+
field values do not line up. The goal is a repeatable script, not a
33+
manual spreadsheet hunt.
34+
</p>
35+
36+
<section>
37+
<h2>1. Define the matching key</h2>
38+
<p>
39+
Pick the field that identifies the same record in both files:
40+
customer ID, order ID, SKU, invoice number, or transaction ID. If
41+
there is no stable key, create one from a small set of fields and
42+
document the tradeoff.
43+
</p>
44+
</section>
45+
46+
<section>
47+
<h2>2. Normalize before comparing</h2>
48+
<p>
49+
Trim whitespace, standardize casing, parse dates into one format,
50+
and compare numbers as numbers. Many false mismatches come from
51+
formatting differences rather than actual data differences.
52+
</p>
53+
</section>
54+
55+
<section>
56+
<h2>3. Report four failure types separately</h2>
57+
<ul class="article-list">
58+
<li>Rows missing from the left export.</li>
59+
<li>Rows missing from the right export.</li>
60+
<li>Duplicate keys that make comparison ambiguous.</li>
61+
<li>Field mismatches for records that exist in both files.</li>
62+
</ul>
63+
</section>
64+
65+
<section>
66+
<h2>4. Keep the output simple</h2>
67+
<p>
68+
A useful first version usually needs only <code>summary.json</code>,
69+
<code>mismatches.csv</code>, <code>missing_left.csv</code>,
70+
<code>missing_right.csv</code>, and <code>duplicates.csv</code>.
71+
Add Excel output only when someone needs to review the report
72+
manually.
73+
</p>
74+
</section>
75+
76+
<section>
77+
<h2>Copy-paste brief</h2>
78+
<pre><code>Goal:
79+
Compare two CSV exports and generate a reconciliation report.
80+
81+
Files:
82+
- source_a.csv
83+
- source_b.csv
84+
85+
Matching key:
86+
- customer_id
87+
88+
Fields to compare:
89+
- email
90+
- amount
91+
- status
92+
93+
Output:
94+
- summary.json
95+
- mismatches.csv
96+
- missing_left.csv
97+
- missing_right.csv
98+
- duplicates.csv
99+
100+
Rules:
101+
- Trim whitespace.
102+
- Compare email case-insensitively.
103+
- Compare amount as a decimal number.
104+
- Treat blank status as missing.</code></pre>
105+
</section>
106+
107+
<section class="article-cta">
108+
<h2>Need this turned into a script?</h2>
109+
<p>
110+
Open a public quote request with sanitized sample rows and the
111+
expected output shape. Do not post credentials, private customer
112+
data, payment details, or production secrets.
113+
</p>
114+
<a class="button primary" href="https://github.com/xyjk0511/codex-services-portfolio/issues/1">
115+
Request a quote
116+
</a>
117+
<a class="button secondary" href="../csv-kit/index.html">
118+
See sample output
119+
</a>
120+
</section>
121+
</article>
122+
</main>
123+
</body>
124+
</html>

index.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,11 @@ <h2 id="workflow-title">How a small job starts.</h2>
174174
<li>I confirm whether the scope is small enough for a fixed quote.</li>
175175
<li>I deliver a patch, script, or prototype with verification evidence.</li>
176176
</ol>
177+
<p>
178+
<a class="text-link" href="guides/csv-reconciliation-checklist.html">
179+
Read the CSV reconciliation checklist
180+
</a>
181+
</p>
177182
</section>
178183

179184
<section class="boundaries" aria-labelledby="quote-title">

sitemap.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@
66
<url>
77
<loc>https://xyjk0511.github.io/codex-services-portfolio/csv-kit/</loc>
88
</url>
9+
<url>
10+
<loc>https://xyjk0511.github.io/codex-services-portfolio/guides/csv-reconciliation-checklist.html</loc>
11+
</url>
912
</urlset>

styles.css

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,13 +250,73 @@ h2 {
250250
margin-top: 12px;
251251
}
252252

253+
.text-link {
254+
color: var(--blue);
255+
font-weight: 700;
256+
}
257+
253258
.boundaries {
254259
display: grid;
255260
grid-template-columns: 0.9fr 1.1fr;
256261
gap: 36px;
257262
border-top: 1px solid var(--line);
258263
}
259264

265+
.article-page {
266+
width: min(880px, 100%);
267+
margin: 0 auto;
268+
padding: 64px 28px 82px;
269+
}
270+
271+
.article-page h1 {
272+
max-width: 860px;
273+
margin: 18px 0 24px;
274+
font-size: clamp(44px, 6vw, 78px);
275+
}
276+
277+
.article-page section {
278+
padding: 38px 0;
279+
border-top: 1px solid var(--line);
280+
}
281+
282+
.article-page h2 {
283+
max-width: 760px;
284+
font-size: clamp(28px, 3.6vw, 46px);
285+
}
286+
287+
.article-page p,
288+
.article-list {
289+
color: var(--muted);
290+
font-size: 17px;
291+
line-height: 1.6;
292+
}
293+
294+
.article-list {
295+
margin: 0;
296+
padding-left: 22px;
297+
}
298+
299+
.article-page pre {
300+
overflow-x: auto;
301+
padding: 22px;
302+
background: var(--ink);
303+
color: #fff;
304+
border-radius: 8px;
305+
line-height: 1.55;
306+
}
307+
308+
.article-cta {
309+
display: flex;
310+
flex-wrap: wrap;
311+
gap: 14px;
312+
align-items: center;
313+
}
314+
315+
.article-cta h2,
316+
.article-cta p {
317+
width: 100%;
318+
}
319+
260320
@media (max-width: 860px) {
261321
.hero,
262322
.section-heading,

0 commit comments

Comments
 (0)