Edge
Get Edge to manage all of your crypto assets. The most secure way to buy, store and trade crypto under your control Accounts Created + 0 MM Assets Supported + 0 Languages Supported 0 Countries Support
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证A SiteLedger built for Algosoup's take home assessment.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Live: https://site-ledger-lyart.vercel.app
Small landlords and builders upload building invoices (PDF or photo). SiteLedger reads each invoice with Claude, checks it in code, and files it under the right property and month. Clean invoices file automatically. Anything that fails a check goes to a Needs Review queue, where a person corrects it and confirms it, or rejects it. Each property has a dashboard and an Excel download that is always up to date.
The live app is loaded with a fictional company (Charbak Contracting) and three fictional properties: Mars (MR1 4RS), Jupiter (JP4 2GS) and Saturn (ST6 9RR). The receipts in examples/ are fictional PDFs and phone photos from five suppliers (contact sheet, ground truth). They are split by whether they are already in the app.
examples/not-on-the-system/: upload these to see them processed fresh.
| File | What happens |
|---|---|
05_mars_knotty.pdf | Files automatically under Mars |
10_jupiter_knotty.jpg | Photo; files automatically under Jupiter |
15_saturn_orbital.jpg | Photo; files automatically under Saturn (October) |
07_jupiter_hammer.jpg | Till receipt with only a total, so it goes to Needs Review. The "JOB REF" hint names the property. |
09_jupiter_pipedream.pdf | No delivery address, so it goes to Needs Review. The "Your Reference" hint names the property. |
examples/on-the-system/: already filed (or waiting in Needs Review). Upload any of these to see the duplicate check catch it.
Delete anything you like. On a property's page, each invoice row has a Delete button, which removes the invoice and its stored file. A deleted receipt can then be uploaded again from examples/ and is treated as new. In Needs Review, Reject removes an invoice from totals.
Then open Needs Review to correct and file an invoice, and open a property for its dashboard and Download Excel.
samples/ has 6 more generated PDFs covering the failure cases: wrong arithmetic, a duplicate of sample 01, and no delivery address. None are on the system. Regenerate them with npm run samples.
node --env-file=.env scripts/eval-examples.mjs uploads all 15 receipts (both folders) and scores the result against examples/ground_truth.csv. The live run scored 65/75 fields correct: 10 filed automatically and 5 went to review.
upload ─► validate file ─► daily cap ─► extractInvoice() ─► checks (code) ─► Blob + Postgres
(Claude reads) │
├─ all pass ─► filed: properties/{property}/{YYYY-MM}/{supplier}-{no}.{ext}
└─ any fail ─► Needs Review: review/{id}.{ext} ─► edit ─► re-check ─► filed / rejected
extractInvoice(file) (src/lib/extraction) is the single AI touchpoint: Claude Sonnet 5.5 with structured outputs, validated by zod, every field nullable. A mock implementation (EXTRACTOR=mock) returns fixed data.See db/schema.sql.
company: your billing address.
properties: name, plus a normalised unique postcode.
invoices:
filed | needs_review | rejected;A CHECK constraint guarantees every filed invoice is complete.
extraction_usage: the daily counter.
Next.js 16 (App Router, Cache Components) · TypeScript · Tailwind · Neon Postgres · Vercel Blob · Anthropic SDK (Claude Sonnet 5.5) · zod · exceljs · vitest · pdf-lib (samples).
npm install
cp .env.example .env # fill in the values
npm run db:setup # create tables and seed demo data (idempotent)
npm run check-env # verify Postgres, Blob and Anthropic credentials
npm test # unit tests
npm run dev
Out of scope for this 2-hour build:
Improvements noted along the way: