Tally production shop

Worked samples · four jobs, start to finish

The same four jobs, done, so you can judge before you pay.

Each one below was built from invented source material of the kind people actually send: a phone photo of a menu, a spreadsheet exported from a till, a bare product title, a page out of a scanned supplier document. The source is fake. The output is the real thing at the real quality.

Example material, not a client No names, real or otherwise Output shown at full size

02$39

Product catalog copy

Source: a store export with a title column, a spec column and nothing in the description column. Three of the twenty rows are shown.

Example material, not a client

Before · the title as exportedAfter · the description written from it
WKBNCH-2D-OAK
"Workbench 2 drawer oak 1500mm"
Specs: 1500 x 620 x 900mm, 38mm top, 120kg
A 1500mm bench built to be leaned on. The top is 38mm solid oak, thick enough to clamp to without a backing board and heavy enough that it does not walk when you plane against it. Two drawers on full extension runners take the tools you reach for every ten minutes, so they are not on the top. Rated to 120kg spread load, 900mm high, which suits standing work for most people without a riser.
APRN-WX-14
"Waxed apron 14oz brown"
Specs: 14oz cotton canvas, 4 pockets, cross-back
Fourteen ounce waxed canvas, which is the weight where an apron stops being a tea towel and starts stopping sparks. Cross-back straps put the load on your shoulders rather than your neck, so it is still comfortable at hour six. Four pockets: two deep at the hip, one chest, one narrow for a rule. The wax darkens and creases where you fold, which is either the point or a warning, depending on what you want it to look like in a year.
CLMP-FBAR-600
"F clamp 600mm heavy duty"
Specs: 600mm reach, 120mm throat, 450kg
A 600mm F clamp with a 120mm throat and 450kg of clamping force, which is enough to close a glue line in hardwood rather than just hold it still. The rail is drawn steel, so it flexes less at full extension than a pressed section will. Padded jaws mean no witness marks on softwood. Buy two more than you think you need, because you will.

Delivered asdescriptions.csv

sku,title,description,short_description
WKBNCH-2D-OAK,"Workbench 2 drawer oak 1500mm","A 1500mm bench
built to be leaned on. The top is 38mm solid oak...","Solid oak
1500mm bench, two drawers, 120kg rated."
APRN-WX-14,"Waxed apron 14oz brown","Fourteen ounce waxed
canvas, which is the weight where...","14oz waxed canvas
apron, cross-back, four pockets."
CLMP-FBAR-600,"F clamp 600mm heavy duty","A 600mm F clamp
with a 120mm throat and 450kg...","600mm F clamp, 450kg,
padded jaws."

Why it is shaped like thatimport notes

Column names match the Shopify product CSV, so the file imports without remapping. WooCommerce and most spreadsheets read the same file without changes.

The short_description column exists because the long one gets truncated in category listings, and a description cut off mid-sentence at the point of sale is worse than a short one.

Nothing is claimed that is not in your specs. No invented warranty, no invented origin, no "premium". If a spec is missing, the sentence that would have used it is not written.

03$25

Data cleanup batch

Source: a customer list that has been through three systems and two people. Eight rows shown of a placeholder file of 940.

Example material, not a client

Incustomers_final_v3 (2).csv

name,email,phone,address
"SMITH, JANE",Jane.Smith@Example.COM ,07700 900123,"14 bell st, flat 2, BS1 4TR"
Jane Smith,jane.smith@example.com,+447700900123,"14 Bell Street Flat 2 BS1 4TR"
robert  o'neill,R.ONeill@example.com,(0117) 4960123,"3 Quarry Rd, Bristol BS8 1AB"
Bob O'Neill,r.oneill@example.com,0117 496 0123,"3 Quarry Road Bristol BS8 1AB"
"Ms A. Kaüfmann",a.kaufmann@example.com,,"22 Hill View, BS6 5QT"
,,07700 900456,"no address given"
Dieter Weiß,d.weiss@example.com,07700900789,"9 Park Cres BS7 8HT"
LTD ACME SUPPLIES,accounts@acme.example,0117 496 0999,"Unit 4 Trade Park BS2 0RT"

Outcustomers_clean.csv

first_name,last_name,email,phone_e164,line1,line2,postcode
Jane,Smith,jane.smith@example.com,+447700900123,Flat 2,14 Bell Street,BS1 4TR
Robert,O'Neill,r.oneill@example.com,+441174960123,,3 Quarry Road,BS8 1AB
Anna,Kaufmann,a.kaufmann@example.com,,,22 Hill View,BS6 5QT
Dieter,Weiß,d.weiss@example.com,+447700900789,,9 Park Crescent,BS7 8HT
,ACME Supplies Ltd,accounts@acme.example,+441174960999,Unit 4,Trade Park,BS2 0RT

The change note that ships with it

  • 2 duplicate pairs merged. Jane Smith and Robert O'Neill each appeared twice. The row with more filled fields won; the phone number was taken from whichever row had one.
  • Encoding repaired on 2 rows. The file was UTF-8 read as Latin-1. Kaufmann and Weiß are restored to their correct spelling rather than stripped of accents.
  • Name column split into first and last, with "SMITH, JANE" reversed to the right order and the title "Ms" dropped into no column, because you did not have one for it.
  • Phones normalised to E.164. The 0117 numbers resolved to +44 117. One number, 07700 900456, had no name or email attached to it and was moved to the rejects file rather than guessed at.
  • Addresses split into line 1, line 2 and postcode. "Rd" and "Cres" expanded, "flat 2" moved to line 1, casing fixed.
  • 1 row moved to rejects.csv and not deleted. It is the row with no name, no email and the address "no address given". You get that file too.
  • Nothing was invented. Anna's first name comes from the "A." plus the email prefix and is flagged in the note as inferred. Empty stays empty everywhere else.
Buy a cleanup batch · $25 Up to 1,000 rows · same day

04$19

Document to structured text

Source: page 11 of a scanned supplier price schedule, photocopied at least twice, with a table that no PDF reader gets right.

Example material, not a client

Intext as the scan reads it

SECTION 4 - BULK RATES (rev. Mar)

All  rates  quoted  per  unit ex works and
are held for 30 days frorn date of issue.
Orders below the minirnum quantity are
charged at the single unit rate. Pallet
surcharge applies to  band C  only.

grade    qty band    unit    lead
------   ---------   -----   ------
A2       1-49        14.20   3 days
A2       50-199      12.75   3 days
A2       200+        11.40   5 days
B1       1-49        9.60    3 days
B1       50+         8.15    7 days
C        any         6.05    14 days*

* band C lead time excludes the pallet
  surcharge handling period

Outsection-04.md

Section 4. Bulk rates (rev. March)

All rates quoted per unit ex works and are held for 30 days from date of issue. Orders below the minimum quantity are charged at the single unit rate. Pallet surcharge applies to band C only.

GradeQty bandUnitLead
A21–4914.203 days
A250–19912.753 days
A2200+11.405 days
B11–499.603 days
B150+8.157 days
Cany6.0514 days *

* Band C lead time excludes the pallet surcharge handling period.

The Markdown itselfcopy and paste

## Section 4. Bulk rates (rev. March)

All rates quoted per unit ex works and are held for
30 days from date of issue. Orders below the minimum
quantity are charged at the single unit rate. Pallet
surcharge applies to band C only.

| Grade | Qty band | Unit  | Lead     |
|-------|----------|-------|----------|
| A2    | 1-49     | 14.20 | 3 days   |
| A2    | 50-199   | 12.75 | 3 days   |
| A2    | 200+     | 11.40 | 5 days   |
| B1    | 1-49     | 9.60  | 3 days   |
| B1    | 50+      | 8.15  | 7 days   |
| C     | any      | 6.05  | 14 days* |

\* Band C lead time excludes the pallet surcharge
handling period.

Or as JSONsection-04.json

{
  "section": 4,
  "title": "Bulk rates",
  "revision": "March",
  "terms": [
    "per unit ex works",
    "held 30 days from date of issue",
    "below minimum qty charged at single unit rate",
    "pallet surcharge applies to band C only"
  ],
  "rates": [
    {"grade":"A2","qty_min":1,"qty_max":49,
     "unit":14.20,"lead_days":3},
    {"grade":"A2","qty_min":50,"qty_max":199,
     "unit":12.75,"lead_days":3},
    {"grade":"A2","qty_min":200,"qty_max":null,
     "unit":11.40,"lead_days":5},
    {"grade":"B1","qty_min":1,"qty_max":49,
     "unit":9.60,"lead_days":3},
    {"grade":"B1","qty_min":50,"qty_max":null,
     "unit":8.15,"lead_days":7},
    {"grade":"C","qty_min":null,"qty_max":null,
     "unit":6.05,"lead_days":14,
     "note":"excludes pallet surcharge handling"}
  ]
}
  • Two scan errors corrected: "frorn" to "from" and "minirnum" to "minimum". Both are the classic rn/m misread and both are listed rather than silently fixed.
  • The table survived. Six rows, four columns, footnote attached to the row it belongs to instead of floating at the bottom of the page.
  • Quantity bands became numbers in the JSON output, with an open upper bound written as null rather than as the string "200+", so it can be compared against.
  • Nothing was helpfully completed. The scan does not say what "ex works" covers, so neither does the output.
Buy a conversion · $19 Up to 40 pages · same day

Send your own material

Or ask whether yours fits

Replies to email do not reach this address. This form does.