Custom Software Development

CFP Raffle — Lottery & Raffle Back-Office

Campaign setup, ticketing, banking and a multi-client export engine for charity raffles and lotteries

Client
CFP Lottery & Raffles
Duration
Phased build · ~3 months
Launched
Apr 2026
Internal platform
CFP Lottery & Raffles — Raffle Management Platform
Caps enforced in-model
Ticket compliance
The Challenge

Running charity raffles at scale means enforcing UK gambling limits, allocating tickets, capturing entries from scanned forms, banking the takings weekly, handling Gift Aid — and then sending each charity client their data in a completely different file format. The export problem alone had quietly become unmaintainable.

  • Manage raffle campaigns with UK gambling ticket limits enforced in the data model
  • Allocate sequential and bulk ticket numbers to supporters reliably
  • Capture entries from scanned response forms with OCR and human QA
Our Solution

We built CFP Raffle on Django, sharing the Insyte processing core, with raffle-specific campaign and ticketing logic, weekly banking consignments, and a declarative export engine that turns one dataset into any client’s file format without new code per client.

  • Modelled campaigns with configurable per-supporter ticket caps (default £60) for compliance
  • Allocated sequential and non-sequential ticket numbers per supporter
  • Captured entries via Claude-powered OCR of scanned forms, then human QA
Results Achieved
Ticket compliance Caps enforced in-model
Client exports Declarative templates
Form capture OCR + QA
One system, many clients A single bureau platform serves many charities, each with isolated data and their own export format — no per-client code branches
Compliance by design Gift Aid and HMRC-rate handling, 2FA, audit logging and GDPR erasure built into the core

A closer look

Inside the build

Real screens from CFP Lottery & Raffles's raffle management platform.

CFP Raffle export centre with per-client export templates and recent export jobs
Export Centre — one engine produces each charity’s exact file format (Pilgrims, KRUK, RBL and more).
CFP Raffle secure sign-in screen with CFP Lottery & Raffles branding
Secure access — 2FA-protected sign-in for bureau staff.

Project Overview

Charity raffles look simple from the outside and are anything but underneath: gambling-compliance limits, ticket allocation, entries arriving on paper, weekly banking, Gift Aid, and — the quiet killer — every charity client wanting their data exported in a different file format. CFP Raffle is the back-office we built for CFP Lottery & Raffles to run all of it from one system.

It shares a processing core with CFP Insyte and adds the raffle-specific logic: campaigns, ticketing, weekly consignments and a multi-client export engine.

The Strategic Challenge

  • Compliance in the model. UK gambling rules cap how much a supporter can spend; that limit had to be enforced by the data model, not a sticky note.
  • Entries on paper. Response forms arrive scanned and must be captured accurately, then checked.
  • Weekly money. Takings needed grouping into banking consignments by payment type and reconciling, week after week.
  • The export problem. Each charity wanted a bespoke file set — Pilgrims an 8-file feed, KRUK a 6-file one, RBL a universal format. Hand-building these had become unmaintainable.

How We Built It

Campaigns that enforce the rules

Campaigns carry timelines, draw dates and configurable per-supporter ticket caps (default £60), so compliance is automatic. Tickets allocate sequentially or in bulk.

OCR, then a human

Scanned forms are extracted with Claude vision OCR and then verified through the same human QA discipline as Insyte — accuracy first, because these are real entries and real money.

Banking, weekly

Each week’s takings group into consignments by payment type and reconcile with status tracking and issue flags — cheques, cash and vouchers included.

Exports as configuration, not code

The heart of the build is a declarative export engine: columns, transforms (date formats, boolean maps, address merges) and row rules are configured per client, so one dataset becomes any charity’s exact file format with no new code branch. New client, new template — not a new release.

Results & Impact

CFP Raffle runs a raffle end to end — ticketing with compliance caps, OCR + QA capture, weekly banking reconciliation, and a declarative export engine that serves many charities from one system. Gift Aid, HMRC-rate tracking, 2FA, audit logging and GDPR erasure are built into the shared core.

Technology

Django 5.2 with HTMX/Alpine, Anthropic Claude OCR, PostgreSQL 18 with per-client scoping, Celery + Redis for async exports, Cloudflare R2 storage, containerised on Coolify.


Running a bureau or high-volume operation? We build operational platforms that turn fire-fights into configuration — see software development and the related CFP Insyte case study. Talk to us.

Key Features

Campaign & Ticket Management

Create raffle, superdraw and lottery campaigns with timelines, draw dates and per-supporter ticket caps enforced for compliance.

  • UK gambling limits in the model
  • Sequential & bulk allocation
  • Draw-date and timeline tracking

Scanned-Form OCR & QA

Capture entries from scanned response forms with Claude OCR, then verify each one through a human QA review.

  • No manual entry to begin
  • Every record human-verified
  • Audit trail on approvals

Weekly Banking

Group each week’s takings into banking consignments by payment type and reconcile them with status tracking.

  • Cheque, cash and voucher handling
  • Per-week consignments
  • Reconciliation issue flags

Multi-Client Export Engine

A declarative template system turns one dataset into any charity client’s exact file format — without writing new code per client.

  • Pilgrims, KRUK, RBL and more
  • Column transforms and row rules
  • Scheduled or on-demand

Gift Aid & Compliance

Capture Gift Aid declarations, track the HMRC rate, and support GDPR erasure — with 2FA and audit logging throughout.

  • Correct Gift Aid reclaim
  • Auditable HMRC-rate changes
  • GDPR donor erasure
"The export work used to be a constant fire-fight — every charity wanted their data a different way. CFP Raffle turned that into configuration instead of code, and combined with the OCR and weekly banking, a raffle now runs through one system from the first ticket to the final client file."
OL
Operations Lead
CFP Lottery & Raffles
Charity TechnologyDjangoRaffle SoftwareOCRData ExportCustom Software Development

Related Projects

Ready to Transform Your Business?

Let's discuss how we can help you achieve similar results