Web-App für Hypixel Skyblock (Garden / Greenhouse) – läuft komplett auf Val Town.
- Alle 3 Greenhouses untereinander, mit Live-Countdown pro Pflanze
- Grün = „reift in …", Rot = „Verfall in …", Blau = Timer ist
abgelaufen und zählt jetzt nach oben (
+1h 20m) - Unter jedem Countdown steht in Grau die genaue Uhrzeit des Ereignisses
(
reift am 17.09. 08:14) – auch nach dem Verfall bleibt sie stehen, damit du weißt, wann es passiert ist - Oben rechts der Next-Stage-Timer mit Zähler und
−/+zum manuellen Korrigieren (der Zähler zählt pro durchgelaufener Wachstumsstufe automatisch eins hoch) - Oben unter der Überschrift eine graue Box mit den nächsten Ereignissen und deren exakter Zeit
- Unten ein Notizen-Feld (speichert automatisch)
- Cronjob prüft im Hintergrund und schickt Pushes via ntfy.sh
- Wenn das „12 Unique Crops"-Setup verfällt, rechnet die App automatisch alle laufenden Pflanzungen auf die langsamere Wachstumsgeschwindigkeit um
| Datei | Typ | Zweck |
|---|---|---|
site.http.ts | HTTP | API + liefert das Frontend aus |
public/index.html | Datei | Markup + Styles |
public/app.ts | Datei | Client-Logik (wird als /app.ts ausgeliefert) |
db.ts | Modul | Schema/Migration + Timer-Mathematik |
ntfy.ts | Modul | Push-Versand an ntfy.sh |
reminder.cron.ts | Interval | Reife/Verfall prüfen + Pushes |
- Installier die ntfy App auf dem Handy (Play Store / App Store, kostenlos).
- Denk dir einen langen, einzigartigen Topic-Namen aus, z. B.
greenhouse-decay-k9x2mQ7p(nicht erratbar, damit niemand sonst mitliest). - In der ntfy-App: Server auf
https://ntfy.shlassen – nicht die Val-URL eintragen! Diese Web-App ist kein ntfy-Server, sie schickt nur Nachrichten an ntfy.sh. Trägt man hier die Val-URL ein, kommtWebSocketNotSupportedException: Expected HTTP 101 response but was '404'. +→ Topic abonnieren → genau den Topic-Namen eingeben (Groß-/Kleinschreibung zählt).- In der Web-App unter „⚙️ Einstellungen" denselben Topic-Namen eintragen und speichern.
- „Test-Push senden" – die Antwort zeigt jetzt direkt, ob ntfy den Push
angenommen hat (
{"ok":true,"status":200}) oder was schiefging.
Emojis dürfen nicht in HTTP-Headern stehen (ntfy-Titel), sonst bricht
fetch()mitnot a valid ByteStringab.ntfy.tsfiltert Header deshalb auf ASCII und packt Emojis in den Nachrichtentext.
Oben im Header gibt es zwei Tabs: 🌿 Tracker und 🌾 Contests. Man kann auch einfach nach links wischen (rechts von der Tracker-Seite liegt die Contest-Seite) und mit nach rechts wischen wieder zurück.
Die Contest-Seite zeigt die nächsten ~12 Jacob's Farming Contests mit:
- SkyBlock-Datum (z. B. „Late Autumn 9th, Year 514")
- genauer Start-/Endzeit in deiner lokalen Zeitzone
- Countdown („in 1h 12m"), laufende Contests sind grün markiert
- die 3 Crops des jeweiligen Contests
Datenquelle: jacobs.strassburger.dev – die
Liste wird serverseitig 30 Minuten gecacht (/api/contests), damit die fremde
API nicht belastet wird. Der Zeitplan wird nur einmal pro SkyBlock-Jahr neu
eingetragen; nach dem Year-Event kann die Quelle kurzzeitig leer sein.
Läuft die Web-App dem echten Spiel auseinander: auf die Pflanze tippen → im
Sheet „Timer korrigieren" mit −30m / −10m / −5m / −1m / +1m / +5m / +10m / +30m.
Bei einer wachsenden Pflanze verschiebt das den Wachstums-Timer, bei einer
ausgewachsenen den Verfalls-Timer.
Im gleichen Sheet:
- Verbleibende Wachstumsstufen neu setzen (Wert wie im Plant Diagnostics Tool)
- Verfalls-Timer setzen (Tage/Stunden/Minuten)
- Ausgewachsen / Wieder wachsend umschalten
- 🗑️ Entfernen = geerntet/verfallen, raus aus der Liste
Der Timer oben rechts läuft über die eingestellte Stage-Dauer und zählt bei jeder durchgelaufenen Stufe den Zähler eins hoch. Passt er nicht zum Spiel:
−/+neben der Zahl = Zähler manuell um 1 korrigieren- „Stage-Timer neu starten" in den Einstellungen = Timer auf „jetzt + eine Stage"
- Stage-Dauer mit/ohne Bonus: Sekunden pro Wachstumsstufe, wie im Plant Diagnostics Tool angezeigt (Baseline ohne Bonus 4h = 14400s; mit vollem Bonus ca. 1h44m20s = 6260s)
- Erinnerung X Stunden vorher: Standard 12h
- Alles läuft serverseitig auf Val Town – die Seite muss nicht geöffnet sein, damit Pushes ankommen.
- Die App kann nicht selbst erkennen, wann im Spiel eine der 12 Unique Crops stirbt – diese Pflanze wie jede andere mit Verfallsdauer eintragen und als „Bonus-Quelle" markieren. Sobald ihr Timer abläuft, übernimmt die App den Rest.