← all work

Scriptor

A writing community for quotes, short stories and novels — built in 2021 with no architecture at all. Four commits, 39 Java files, and two different Firebase databases doing overlapping jobs. The first thing I ever shipped.

Role
Sole developer — Android, Java
Span
Sep ’21
Kind
Self-initiated · product
Status
archived
Stack
Java · Android · Firebase Auth · Firestore · Realtime Database · Glide · Material Design

The first one

Scriptor is a writing community. People post quotes, short stories, novels and poems; other people read them; an admin panel moderates users and content. Java, 39 source files, minSdk 19, targetSdk 30.

Its first commit is dated 2021-09-22 and reads SEIAM V 1.0. There are four commits in total, and the last of them is a README added in 2024 — three years after the code. There is no incremental history because there was no incremental development. I built it, then pushed it.

The real app, 2021 — untouched screenshots, cropped to drop the Android chrome. Not a live app anymore, so this is what shipped, not a rebuild of it.

Two databases, one confusion

The dependency block is the most honest documentation this project has:

the dependency block, app/build.gradle
implementation 'com.google.firebase:firebase-auth:21.0.1'
implementation 'com.google.firebase:firebase-database:20.0.1'
implementation 'com.google.firebase:firebase-storage:20.0.0'
implementation 'com.google.firebase:firebase-firestore:23.0.3'

Realtime Database and Firestore, declared four lines apart, for overlapping jobs.

Those are two different databases with two different data models and two different pricing models. Google’s own documentation opens by telling you to choose. Having both is not a wrong choice between them — it is not knowing a choice existed.

No layer of any kind

There is no ViewModel, no repository, no data layer, no interface between the screen and the network. MainActivity.java is 8,350 bytes and talks to Firebase directly. auth/SignUp.java is 7,112 bytes and talks to Firebase directly. So does every screen under sections/ — quotes, novels, short stories, poems — and every tab of the admin panel under cpanel/.

The package structure is genuinely organised by feature, which is the one thing the project gets right: sections.quotes, sections.novels, cpanel.tabs.users, cpanel.tabs.feedback. The folders are sensible. What is inside them is an Activity holding the whole feature.

Every arrow into the accented node is the same mistake, drawn once. Poems is the one screen that reaches neither — not a fix, just a feature that was never wired up.

What it actually proves

Not skill. Breadth of appetite: four content types, user profiles, a feedback system and a moderation panel, from someone who had not yet learned what a repository pattern was for.

The README added in 2024 describes “Firebase Mastery” and “Advanced Android Development”. That is retrospective marketing written three years later by someone who wanted the project to be more than it was. The code is the truthful record, and the code says: this is where I started, and I did not know what I did not know.

Everything I have built since is measured from here.

This kind of problem?

I build production systems that answer “where is it now?” — reconciliation engines, geolocation platforms, ride-sharing coordination layers, AI tool servers. If you’re facing a system that needs to survive real traffic, real constraints, and real time — let’s talk.