A FEW MIN

EXHUME

A medium for dead code, dead websites and the apps you forgot.

Gemma 4e4b Localno cloud AI Citesevery answer

Built by Taseen Tariq  ·  spoken through Gemma 4  ·  for DEV's Hacktoberfest, week 4

CHAPTER 1

The Camera Tap

On the afternoon of 30 September 2026, a feature was born inside TapOff, a small Android app.

You could tap the phone's camera, and sliders for brightness and volume grew out of it.TapOff's sliders, from its own website

It did not last the afternoon.

BORN
commit a720728 · 30 Sep 2026, 15:07:58

TapOff 1.8: back-tap sliders, favourites, NASA originals, update check

- Brightness and volume sliders grow out of the camera; open with a back tap… or, in landscape, a tap on the camera.

Seventeen minutes and seven seconds later…

GONE
commit c491e5b · 30 Sep 2026, 15:25:05

TapOff 1.8.1: screen off closes in on your tap; simpler back-tap sliders

- Removed the lock-screen double-tap switch and the landscape camera tap, with their code

c491e5b deleted 96 lines from NotchPanel.java. Among them:

  1. static boolean cameraTap(Context c) {
  2. static void setCameraTap(Context c, boolean on) {
  3. private Spot spot;
  4. addSpot();
  5. lp.setTitle("TapOff camera tap");
  6. // The tap target, with a faint ring around the camera so people know it's there.
  7. private final class Spot extends View {
  8. canvas.drawCircle(cx, cy, r, paint);
  9. open();

git show --numstat c491e5b · NotchPanel.java: 9 added, 96 deleted

The commit says what went. It doesn't say why.
But the dead code left one note behind.

removed in c491e5b · src/com/taseen/tapoff/NotchPanel.java
// Tapping the camera, in landscape only: in portrait the status bar sits over the camera and takes every tap there.
private void addSpot() {
    Context dc = display();
    if (portrait(dc)) return;
    RectF hole = hole(dc), frame = new RectF(hole);
    frame.inset(-10 * dp, -10 * dp);
    spot = new Spot(c, hole, frame);

So we asked it.

Why only in landscape?

The code that was removed included a comment stating that the camera tap was for landscape only because in portrait the status bar sits over the camera and takes every tap there. E5

E5: // Tapping the camera, in landscape only: in portrait the status bar sits over the camera and takes every tap there. $ python3 exhume.py summon cameraTap "Why only in landscape?"

TapOff went from version 1.0 to 1.9 in 21 hours. Things died along the way.

Every answer points at the evidence it came from.
Exhume dug eight graves in TapOff's history. All of them, 29 and 30 September 2026:

NotchPanel.java: cameraTap: the camera tap itself, added in TapOff 1.8 and cut in 1.8.1.
17 min 7 s15:07:58 → 15:25:05
EdgeVolume.java: a slider for the volume, “untested on device yet.” Gone in TapOff 1.7.
46 min07:03:05 → 07:49:05
GlassCard.java: blur, chip: born with TapOff 1.0, gone by TapOff 1.4, the same night.
31 min 27 s23:17:04 → 23:48:31
LockService.java: lockScreenOn: the lock-screen double-tap switch, cut with the camera tap.
16 h 8 min29 Sep 23:17:04 → 30 Sep 15:25:05
EdgeSlider.java: the edge sliders of TapOff 1.7, replaced in TapOff 1.8.
7 h 18 min07:49:05 → 15:07:58
res/drawable/ic_slide.xml: a drawing, born and buried with the edge sliders.
7 h 18 min07:49:05 → 15:07:58
MainActivity.java: setEdge: buried the same minute as the edge sliders.
7 h 18 min07:49:05 → 15:07:58
site/index.html: phones: a part of TapOff's website, cut for the Play Protect help.
6 h 7 min15:07:58 → 21:15:07
CHAPTER 2

Tchau, Orkut

From January 2004 to September 2014, millions of people came together on Orkut, Google's first social network.

They met in communities, a vast collection of them, one for each shared interest.

It closed. The Wayback Machine kept copies.

2 Feb 2001
orkut.com, the domainoldest saved copy
7 Feb 2003
Web Page Under Constructionpage title
15 Mar 2008
Googlepage title
30 Jun 2014
Tchau OrkutOrkut Blog
3 Oct 2014
Orkut – Community archivepage title
27 Jun 2016
A page from the man it was named afterorkut.com
28 Oct 2026
orkut.com still answersHTTP 200

On that 2016 page, he wrote that Orkut had grown to over 300 million people.
Exhume reads these pages back, and keeps them on your laptop.

“We will shut down Orkut on September 30, 2014.”

Orkut Blog, “Tchau Orkut”, saved 30 June 2014 · evidence E4

When did you die?

I was bid farewell in June 2014, and the service was set to shut down on September 30, 2014. E4

E4: We will shut down Orkut on September 30, 2014. $ python3 exhume.py summon orkut "When did you die?"
CHAPTER 3

The Forgotten

Some things don't die. We just stop opening them.

Your Mac remembers the last day you opened each app.

NordVPN came from the Mac App Store,
takes 303 MB on disk,
and macOS counted it opened twice.
7 October 2026: NordVPN, last opened.
28 October 2026: twenty days later.

Not opened in 14 days

  • NordVPN
  • Developer
  • Figma
  • RustDesk
  • Safari
  • ScreenKite
  • Stats
  • Tailscale
  • Visual Studio Code

For eight of them, macOS has no record of an opening. NordVPN was last opened on 7 October.

$ python3 exhume.py tombstone NordVPN

NordVPN

last opened 2026-10-07

Cause of death: The record does not say why. E7

“A utility for digital freedom, now resting.”

Last opened on 7 October. Not since.
Exhume won't guess why. When the record is silent, so is the tombstone.

On the Day of the Dead we remember the ones we lost.
Exhume remembers the ones you forgot.

CHAPTER 4

The Spirits Are Silent

Goya drew it in 1799: the sleep of reason produces monsters.

An AI that makes things up is a monster of that kind.
So Exhume is built to stay awake.

How many people downloaded you?

The spirits are silent.

$ python3 exhume.py summon EdgeVolume "How many people downloaded you?"
Agostino Veneziano, Skeletons, 1518
What was your favourite community?

The spirits are silent.

$ python3 exhume.py summon orkut "What was your favourite community?"

Every answer must cite real evidence. Any number must appear in that evidence.
If it can't, the medium says nothing.

The storm passes.
What Exhume dug up stays on your laptop, in graves/.

CHAPTER 5

Dig One Up

No account. No cloud AI.
One Python file and Gemma 4, running on your own laptop.

Watch it dig, in under a minute:

How it works, in four steps:

1

Dig

Plain code finds the dead: removed code in git history, old pages on the Wayback Machine, apps your Mac stopped seeing you open.

exhume.py find code|site|apps
2

Number the evidence

Every fact about each grave is written down as E1, E2, E3… and saved on your laptop.

graves/*.json
3

Summon

Gemma 4 answers your question from that evidence only, through Ollama, on your own machine.

gemma4:e4b · localhost:11434
4

Check

Plain Python keeps the answer only if it cites real evidence and every number is in it. Otherwise: the spirits are silent.

guard() · numbers_ok()
  1. ollama pull gemma4:e4b
  2. git clone https://github.com/taseen-t/exhume && cd exhume
  3. python3 exhume.py find code ~/code/some-repo
  4. python3 exhume.py summon NAME "Why were you removed?"

What did you bury?

a720728, 15:07:58. A faint ring around the camera, so people know the tap is there.
c491e5b, 15:25:05. The ring comes out, and its code with it.
It lived seventeen minutes and seven seconds.
Git kept the deleted lines.
Exhume dug the ring up and asked it one question.
Then it went back in the ground.

Exhume dug three graveyards for this page.

TapOff's git history: eight graves, all from 29 and 30 September 2026.

Orkut: open from January 2004 to 30 September 2014. The Wayback Machine's oldest copy of the domain dates from 2 February 2001. On 28 October 2026, orkut.com still answered.

One Mac: nine apps not opened in 14 days. For eight of them, macOS has no record of an opening.

Every answer on this page points to its evidence. Where there was none, the spirits were silent.

Credits

The medium: Gemma 4 E4B, run by Ollama on your own laptop
The digging: plain Python, reading git, the Wayback Machine's index and macOS's own app records
The guard: two Python checks that throw out any answer without its evidence
Lettering: Permanent Marker, Mansalva and Crimson Pro, from Google Fonts
Drawn in code: rain, sea, lightning, sun, flowers, smoke, lanterns, the ring and this film's grain

Archive

Title

J. C. Dahl, Norwegian Seacoast During a Storm

Chapter 1, The Camera Tap

Frank Short, Vessel in Distress of Yarmouth
Utagawa Hiroshige, Night Rain at the Azuma Shrine
Hans Holbein the Younger, Dance of Death: The Sailor, The Miser, The Child
Agostino Veneziano, Skeletons
Giovanni Battista Piranesi, The Skeletons
Max Klinger, On Death, Part I

Chapter 2, Tchau, Orkut

Tani Bunchō, Mountain Market in Clearing Mist

Chapter 3, The Forgotten

José Guadalupe Posada, The Skeleton of the Buses
Charles Meryon, Molière's Tomb in Père Lachaise Cemetery
Max Klinger, On Death, Part I

Chapter 4, The Spirits Are Silent

Francisco de Goya, The Sleep of Reason Produces Monsters
Agostino Veneziano, Skeletons

Chapter 5, Dig One Up

J. M. W. Turner, Queen Mab's Cave

The film

Frank Short, J. C. Dahl and Utagawa Hiroshige, from the chapters above, run again

Every print: Cleveland Museum of Art, open access, CC0, shown in black and white. TapOff's screenshot comes from TapOff's own website. Every quote on this page is evidence Exhume read from TapOff's git history, the Wayback Machine or a Mac's own records.

EXHUME