A drill card generator for Historical European Martial Arts, built on a cutting-diagram notation credited to Joachim Meyer's 16th-century fencing teaching.
A card is a rectangle crossed by eight rays. A numbered disc marks where a cut starts; a dot below it means thrust instead. The background colour tells you which hand to use. Follow the numbers.
Everything else — edge, guard, footwork, tempo — is left to the practitioner. That is the point: the card sets the pattern, you supply the fencing.
Browse more than 100 classic cards, generate unlimited random drills, and export or share them
as PNG or vector PDF. Works offline, in English, German and French. See
FEATURES.md for what the app does.
| Path | Contents |
|---|---|
FEATURES.md |
What the app does, feature by feature |
CONTRIBUTING.md |
How to build, test and submit changes |
CLAUDE.md |
Coding conventions and the development workflow this project follows |
CODE_OF_CONDUCT.md |
Community standards for contributors |
SECURITY.md |
How to report a vulnerability |
docs/PALETTE.md |
The card palette and its verification |
docs/ASSET_PROVENANCE.md |
Licence register — every shipped asset |
PRIVACY_POLICY.md |
What the app stores, and what it does not |
PLAY_DATA_SAFETY.md |
Google Play's Data Safety disclosure, and why every category is "not collected" |
data/original_cards.json |
The classic drill cards |
tools/ |
Palette verification and image-generation scripts, Python |
The host needs only a container runtime (Podman or Docker). No Android SDK, no JDK, no Gradle install.
./scripts/build.shThat runs gradle clean build inside the image, so a successful image build is a successful
verification. Per CLAUDE.md, no commit lands without one. For a faster inner loop
while writing a test, see scripts/test.sh.
Verify the palette (light and dark theme):
python tools/palette/verify_palette.py
python tools/palette/verify_dark_palette.pydata/original_cards.json ships more than 100 classic drill cards in a notation credited to
Joachim Meyer's 16th-century fencing teaching. The Library screen presents them as distinct
drills with a hand toggle, plus a set of technique cards, rather than as one long flat list.
Each drill action is a short numeric record — a direction, a distance from centre, a sequence
position, a thrust flag — not narrative or pictorial expression. Name, artwork, palette,
typography and copy are all original — see
docs/ASSET_PROVENANCE.md, which records the licence and origin of
every asset the app ships.
Fechtkarte is developed with AI assistance — an AI coding agent writes and reviews much of the
code, documentation and translations, working from the conventions in CLAUDE.md
under human direction and review.
Two things follow from that, and both are deliberate. Every change goes through the same gate regardless of who or what wrote it: tests first, then a full containerised build that runs the entire suite — nothing lands red. And decisions get written down with their reasoning rather than just their outcome, which is why this repository carries as much prose as it does.
Apache License 2.0. See LICENSE and NOTICE.
The cut-and-thrust notation is credited to Joachim Meyer (1537–1571).
