Apps · August to September 2026

Plotpin

An Android app for finding a plant again. I built it to walk back to bagged sorghum plants in a crossing block. Now it works for anyone who marks points in a field.

the circle GPS walks you back into. The paint and a photo do the rest
3 m
export formats from one table, CSV, GeoJSON, KML and GPX
4
bars of signal needed, map included
0

Intro

When you cross sorghum in the field, you pick a female plant, bag it and spray-paint it. Then you walk off to collect pollen from five different males before coming back to her. Females are far outnumbered by males, so the walk back can be a long one.

Plotpin started as a prototype I put together in about two hours to get me back to those females. In September I rebuilt it so that anyone who marks points in a field can use it. That means breeders, but also pathologists, soil and insect crews and plot technicians.

GPS won’t find a plant

In an open field, a good phone’s GPS lands within roughly 1 to 4 m. Sorghum rows are 30 inches apart, so that circle covers several plants. The error when you tag a plant and the error when you come back can also add up.

So Plotpin walks you into a circle of about 3 m around the right plant. The paint, the bag, a QR label and the photo you took when tagging do the last few metres.

To make that circle as tight as it can be, tagging takes a few seconds. While you hold still, the app keeps taking readings and averages them, giving the more accurate ones more weight. Each tag shows how accurate it was and how many readings went into it. Pair an RTK receiver and the app uses that instead, recording accuracy in centimetres.

Walking back

Navigate shows an arrow and the distance. The phone vibrates in pulses that come faster as you get closer, so you can walk without staring at the screen. Once you’re inside the combined uncertainty, it tells you you’ve arrived and shows the photo.

  • Navigating to tag F-05: a large arrow, 25 m to go, and three of five donors collectedOn the way
  • Arrived at F-05: a tick and the words You are here, within 2.0 mArrived
Walking back to F-05. The pill at the top shows the current GPS accuracy.

Phone compasses are often 10 to 20 degrees out. At 60 m, being 15 degrees out puts you about 15 m from the plant. Plotpin corrects for magnetic declination. It also learns the compass’s own error by comparing it with the direction GPS says you’re actually walking.

There’s an AR view as well, which draws the tags over the camera image. The arrow is the default, though. The camera only runs when you ask for it.

Crosses

For crossing, a tag is either a parent or a donor. Tag a female and a cross opens on her. Every male you tag while it’s open is recorded against her. The screen counts them towards the number of donors you’re aiming for.

  • The tag list with a cross in progress on F-05, three of five donors collected, and tags sorted by distanceTags
  • The page for F-05 with a rust score, a panicle count, bag type and the donors recorded against itOne parent
The list sorts tags by distance. Each parent keeps its own data and its donors.

Marking a plant done and deleting it are different on purpose. Done means the work happened, so the tag leaves the active list but stays in the record and in every export. Delete is for a tag made by mistake. It asks first, then gives you a few seconds to undo.

A map with no signal

The map is a north-up drawing made from the coordinates themselves. There are no map tiles and nothing to download, so it works in the middle of a field with no signal.

Each tag carries a faint ring for its accuracy, so the map never looks more precise than the readings were. Dashed lines join each donor to its parent, so you can see each cross at a glance. You’re the green dot, with a line showing which way you’re facing.

  • The field map in light mode, with females as pink dots, males as blue triangles and dashed lines from donors to parentsLight
  • The same field map in dark modeDark
The same crossing block in light and dark.

Other kinds of project

Sorghum crossing is now just one preset. When you start a project, a short wizard asks what you’re tagging: parents and donors, one kind of tag, or two kinds you need to tell apart, such as healthy and diseased plants. Each kind gets a name, a letter for its labels and a marker shape as well as a colour, so colour is never the only thing that tells two kinds apart.

Each kind can also carry fields: a score from 0 to 9, a count, a measurement with units, a pick list, yes or no, or a note. Every field becomes a column in the export. A lab lead can set up a project once and share the setup as a file or a QR code, with no data in it.

  • The first step of the new project wizard: crosses, one kind of tag, or two kindsWhat you tag
  • The second step: choosing fields to record on each female, such as a score, a count or a heightWhat you record
  • A project for soil cores in a maize field, with two planned points to walk toSoil cores
Setting up a project, and a soil coring project that has nothing to do with crossing.

Getting data out

Exports go out through the phone’s share sheet as CSV, GeoJSON, KML or GPX, so they open in Excel or R, in QGIS, in Google Earth or on a handheld GPS. All four are built from the same table, so they always agree. These are the columns, followed by one for each field:

project,crop,field,plot,label,role,status,source,latitude,longitude,accuracy_m,altitude_m,
fix_count,collector,created,completed,cross_parent,donor_count,note,photo

It reads the same formats back in as planned points to walk to. QR labels print as a PDF sheet, three across and seven down, on Letter or A4 depending on the phone’s region. Scanning one opens that tag.

Backups are a single file with every tag and photo. Restoring one merges instead of replacing it: tags already on the phone stay, newer edits win and deletions carry across. A crew can use this to combine its phones at the end of the day.

  • The data screen: export to CSV, GeoJSON, KML or GPX, import points, open a setup file, print QR labels and share the setupData
Everything going in and out lives on one screen.

Made for the field

A few details come from actually using it out there:

  • The volume key tags a plant, which works with gloves on.
  • The automatic theme uses the light sensor to switch to light in bright sun and back to dark in shade.
  • Text holds up at large font sizes. Button labels shrink before they get cut off, and rows stack when they don’t fit.
  • Location updates once a second while you navigate or tag. Otherwise it slows down. The camera only starts on the screens that need it. Closing the app stops everything.
  • The welcome screen at 160% text size on a small phone, with every label still readable160% text
  • The settings screen with options for theme, units, auto start tagging, good accuracy, hold time and photosSettings
  • The tag list in dark modeDark
Large text on a small phone, the settings and the tag list in dark mode.

Every screen except the camera ones is rendered in tests, in light, in dark and at 160% text on a small phone. A test fails if one changes by accident. The screenshots on this page come from those tests.

What’s next

It’s called Plotpin now. It was PlantTag until the end of September, but a plant-care app on the Play Store already had a name too close to it.

A Play Store release is the plan. Live sharing between phones isn’t built yet. The idea is peer to peer over Nearby Connections, which works with no signal at all. The limit to design around is range, about 100 m, so two people at opposite ends of a big plot won’t see each other’s tags until they’re closer. Letting someone claim a tag for a few minutes would stop two people walking to the same plant.

More work

2026R packages

FounderForge

A Shiny app that turns real marker data into an AlphaSimR founder population without writing R. Load a VCF, HapMap, numeric or PLINK file, check it, filter it and export what newMapPop() needs.

Tools: R · Shiny · golem · AlphaSimR · vcfR · data.table · ggplot2

2026Machine learning

Colony Counter

An Android app that counts bacterial colonies from plate photos, offline. Two small YOLO models do the counting, in about three quarters of a second a plate on my phone.

Tools: Python · Ultralytics YOLO26 · ONNX Runtime · Kotlin · Jetpack Compose · CVAT

2026Reverse engineering

FF Mod Studio

Tools for modding Freedom Fighters, a game from 2003. There's an editor for its textures and models, plus a Blender addon that sends edits back into the game.

Tools: C++17 · Dear ImGui · miniz · HLSL · Python · Blender

2026R packages

ggWizard

A Shiny wizard for making ggplot2 charts from a CSV or Excel file without writing code. You check and clean the data, pick one of eight chart types and style it, then export it with the R script behind it.

Tools: R · Shiny · golem · ggplot2 · plotly · readxl · DT

2026R packages

Linkmapper

A Shiny app for building genetic linkage maps and mapping QTL without writing code. It began as the final-year project of two colleagues and me at KNUST. Now it's an R package, with a hosted copy that runs in the browser.

Tools: R · Shiny · golem · onemap · R/qtl · ggiraph

2026R packages

Clusnalyst

A Shiny app for cluster analysis of marker, trait and sequence data. My colleagues and I built the first version at KNUST in 2022. In 2026 I rewrote it as an R package with a live demo.

Tools: R · Shiny · golem · ape · cluster · msa · ggtree · ggiraph

2026Codebreaking

The Voynich manuscript

A book about 600 years old, written in a script nobody can read. Here's what's known about it and why no codebreaker has cracked it, with a note on my own work.

Tools: Python · NumPy · SciPy