DEV Community

Cover image for El Eco: an ofrenda for the projects we left in the dark
Koushik D S
Koushik D S

Posted on

El Eco: an ofrenda for the projects we left in the dark

Hacktoberfest Open-Source AI Challenge: Ghost in the Machine Submission 👻🌼

This is a submission for the Hacktoberfest Open-Source AI Challenge: Week 4, Ghost in the Machine.

What I built

El Eco is an algorithmic ofrenda for unfinished work. Not for a person. For the repository you stopped pushing, or a CSV of a habit you stopped logging.

You set a public GitHub repository on the altar, or a file that stays on your machine, or the fictional sample ghost lumen-notes. The page finds the week the work went quiet. TabPFN-3.5 draws the weeks after that as a continuation of the last rhythm: same season, same lag, no invented stars and no invented lines of code. Gemma, through Ollama on this machine, may then speak in the first person as that project. If it cites a number that is not in the dossier, the speech is thrown out and the altar reads the record instead.

The page is one Halloween night. A moon, bats, drifting ghosts, and a graveyard sit behind the altar. Orange columns are the weeks the project was alive. A green line is what TabPFN says the silence would have held. The eulogy sits in a tombstone. A music-box waltz, synthesised in the browser, plays under it and ducks while a voice is speaking.

Demo

GitHub logo Koushiklalala / el-eco

An ofrenda for abandoned projects. TabPFN-3.5 forecasts the silence and local Gemma speaks.

El Eco

An algorithmic ofrenda for the ghosts of unfinished work.

You give it a public GitHub repository, or a CSV that never has to leave your machine, or the fictional sample ghost bundled with this repo. It finds the week the work went quiet. TabPFN-3.5, running locally, says what the later weeks would have held if the last rhythm had continued. Gemma, through Ollama, may then speak as that project. A fact check throws the speech away if it cites a number that is not in the record.

This altar is for abandoned projects. It is not a memorial for a person, and it will not invent one.

Why the open pieces are the product

A closed chat API could write a spooky paragraph. It would also be the thing the project depends on: the history leaves the machine, the bill starts when the candle is…

The first forecast on a cold instance takes a while. TabPFN loads on CPU, and the weights download the first time. /api/health is up before that finishes.

Try the sample ghost first. lumen-notes is a fictional local journal: born 6 June 2022, last touched 6 February 2023, quiet for 1362 days, 142 commits across 36 living weeks. On the run I kept, TabPFN-3.5 on CPU expected about 1.87 commits in the week the work stopped, and 620 across the silence. Gemma 3, locally, wrote the eulogy from that dossier.

Then walk a GitHub username. The longest silences are listed first. A repository touched in the last 90 days is still breathing: the altar shows the weeks, and it refuses to invent a ghost timeline or a eulogy.

On your own machine, with Ollama and gemma3 running, the eulogy is Gemma. On the Render URL, Ollama is not in the container, so the hosted altar reads the grounded record. Speak on this machine uses the browser voice. Send to ElevenLabs is a separate button, and the label says the text leaves the machine.

How it works

flowchart LR
  altar[Ofrenda page]
  api[FastAPI]
  gh[GitHub public API]
  bb[Browserbase page read]
  csv[CSV in the browser]
  death[Silence split]
  tab[TabPFN-3.5]
  gem[Gemma via Ollama]
  check[Number check]
  altar --> api
  gh --> api
  bb --> api
  csv --> api
  api --> death --> tab --> check
  death --> gem --> check
  check --> altar

A week is the death of the work when the last commit is at least 90 days behind today. Training rows stop there. Each silent week is a row of month, ISO week, and the lag-1, lag-2, and lag-4 commit counts frozen at the end of the life. Those features stay inside the range TabPFN saw. That is the honest way to ask a tabular model about a counterfactual, instead of extrapolating a week-index off the edge of the table.

Gemma gets a dossier and a list of allowed integers. The server checks the reply. The grounded fallback is there so a missing model does not become a made-up future.

Commit dates come from GitHub's public API. For a public repository, a Browserbase browser also opens the page and brings back the title and description. Digits are stripped before Gemma sees them, so a number on the webpage cannot sneak into the eulogy. The sample ghost and a CSV never open a browser.

ElevenLabs is the second button. The rite does not press it for you.

Why open innovation matters here

A closed model could write the paragraph. It could not do the thing the altar is for.

The interesting input is a personal history: a dead repo, or a spreadsheet of a habit. Posted to a chat API, that history becomes someone else's log. With TabPFN and Gemma on the machine, a CSV séance needs no network once the weights are local. The GitHub path only asks GitHub for a repository the world can already open.

People who run models locally in 2026 describe the same trade: David Ucolo's guide treats a local model as a real tool rather than a toy, and Suresh Kumar's note on Ollama is blunt about what a hosted API costs you, lock-in and a bill for every call. El Eco is that choice made concrete. The séance is editable. Swap the Ollama tag and the ghost changes voice. A non-Gemma override is refused, so the project cannot quietly enter a Gemma category with a different model. The fact check is possible because the forecast is a table of numbers we computed, not a vibe from a hosted agent we cannot inspect.

I also did not ask a hosted LLM to estimate how big the project would be now. That number would have been a costume. TabPFN's sum is a specific expectation under a stated assumption, that the last rhythm held, and the eulogy is not allowed to improve on it.

Agent session

Building El Eco: an ofrenda for abandoned projects
You

Build El Eco for the Hacktoberfest 2026 Week 4 DEV Challenge, Ghost in the Machine. It is an algorithmic ofrenda for abandoned projects, not for people. Take a public GitHub repository, a local CSV, or a fictional sample ghost, find when the work went quiet, forecast the unwritten weeks with TabPFN-3.5, and let local Gemma speak as that project.

Agent

El Eco is a FastAPI altar. Weekly commit bins decide death after 90 days of silence. TabPFN-3.5 trains only on the living weeks and scores the silence with month, ISO week, and lags frozen at the last living weeks. Gemma runs only through Ollama, and a fact check rejects any integer that is not in the dossier. GitHub history comes from the public REST API. A Browserbase session reads the public page title and description, with digits stripped before Gemma sees them. ElevenLabs is a separate button that says the text leaves the machine. The sample ghost and a CSV never open a browser.

You

I typed my GitHub username, but the graveyard shows nothing.

Agent

The request succeeded. The list was empty because only public repositories quiet for 120 days were shown, and forks were skipped. The graveyard now lists public owner repositories, longest silence first, including recent work and forks. Private repositories stay hidden.

You

I am not getting any sound. Do we need an ElevenLabs API key, and what type?

Agent

Speak on this machine uses the browser voice and needs no key. ElevenLabs needs a personal user API key with Text to Speech and Voices Read if the key is restricted. The secret stays in the local environment file, which is gitignored. After a restart the button appears under the eulogy.

You

SkyScout shows an error that says [object Object], and the chart is a straight line.

Agent

SkyScout was last touched on 5 October 2026, so it is still breathing. There is no eulogy, and the empty text was sent to ElevenLabs, which returned a validation object the page printed as [object Object]. The line was four commits in one week joined to three empty weeks. The chart is now one column per week, and both voice buttons stay off until there is an eulogy.

You

Make the UI match a Halloween theme, on a single page, with animations. Then add a Halloween background song.

Agent

The page is now one screen: a purple night, moon, bats, drifting ghosts, fog, and a graveyard. The altar is two columns, with growing commit bars and a green forecast line. The music is an original music-box waltz synthesised in the browser, so no audio file is shipped. It starts on the first click, and it ducks while a voice reads the eulogy.

You

Which Hacktoberfest Week 4 prize categories does this submission qualify for?

Agent

Four partner categories: Best Use of TabPFN, Best Use of Gemma, Best Use of ElevenLabs, and Best Use of Browserbase. Render is only a blueprint and is not hosted, so it does not count yet. One submission can enter every category it uses, and it can win once. It is also in the overall prize pool.

You

I want the DevRelay session id, and I want this project pushed to GitHub.

Prize categories

  • Best Use of TabPFN. TabPFN-3.5 forecasts the unwritten weeks from the commit table, locally and on the Render service.
  • Best Use of Gemma. Gemma 3, through Ollama, writes the eulogy on this machine, and a number check rejects anything that is not in the dossier.
  • Best Use of Render. The altar is live at https://el-eco.onrender.com from the Docker blueprint in render.yaml, on the standard plan so the forecast has room to load.
  • Best Use of ElevenLabs. A labeled button turns the eulogy into narration. The text leaves the machine only when someone presses it.
  • Best Use of Browserbase. For a public repository, a remote browser opens the GitHub page and the words come back into the local séance.

Top comments (0)