Bops
A team of AI bots that runs your business ops: inbox, pipeline, invoices, reports. Each one has its own computer, email and phone number, and remembers everything.
翻訳待ち
Nebenkostenabrechnung, Anlage V, Mieten, Kredite und dein Team in einer App. Für private Vermieter mit 1–24 Einheiten — Datenbank in Frankfurt, aktuell im Early Access kostenlos.
翻訳待ち
ビジネスTypeScript · PLpgSQLGitHub @jxnashapオンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Loading the full README. The saved excerpt is shown below.
Next.js (App Router, TypeScript, Tailwind) + Supabase (Postgres, Auth, Storage). Dieses Grundgerüst ist der Start für die neue, modulare Version von MyImmo. 1. Fundament ← du bist hier: Datenmodell + Next.js-Gerüst + Auth + Portfolio-Übersicht 2. Kernverwaltung: Objekte, Einheiten, Mieter, Mietverträge anlegen & bearbeiten 3. Dokumente: Mahnung, Kündigung, Anschreiben als PDF generieren + an Mieter mailen 4. Betriebskosten: Abrechnung hochladen → OCR → Positionen pro Mieter → Nebenkostenabrechnung → mailen 5. Bewertung: Bodenrichtwerte + Marktdaten → laufende Neubewertung des PortfoliosRead the full README ↗
Next.js (App Router, TypeScript, Tailwind) + Supabase (Postgres, Auth, Storage). Dieses Grundgerüst ist der Start für die neue, modulare Version von MyImmo.
# 1. Abhängigkeiten installieren
npm install
# 2. Umgebungsvariablen anlegen
cp .env.local.example .env.local
# NEXT_PUBLIC_SUPABASE_URL und NEXT_PUBLIC_SUPABASE_ANON_KEY eintragen
# (Supabase Dashboard > Project Settings > API)
# Projekt: kozhxrvyilkchjpcuwcm
# 3. Dev-Server starten
npm run dev
# → http://localhost:3000
⚠️ Die Datenbank existiert bereits und enthält echte Daten (9 Objekte, 6 Mieter, Buchungen). Kein Schema einspielen.
supabase/schema.sqlist veraltet; die tatsächliche Struktur steht insupabase/schema-reference.sql.
properties, mieter, einnahmen, kosten, kredite,
verbrauch, notizen, termine, ibans. Besitzspalte überall user_id.auth.uid() = user_id — jeder Vermieter sieht nur
seine eigenen Daten. Diese App setzt beim Anlegen user_id automatisch./login).NEXT_PUBLIC_*-Variablen unter Settings > Environment Variables
eintragen.main deployt automatisch.app/
layout.tsx Layout + Navigation + Abmelden
page.tsx Portfolio-Übersicht
login/page.tsx Login / Registrierung
auth/signout/route.ts Logout
properties/ Objekte: Liste, /new, /[id]/edit
tenants/ Mieter: Liste, /new, /[id]/edit
globals.css
components/
PropertyForm.tsx Objekt-Formular
TenantForm.tsx Mieter-Formular
lib/
supabase/client.ts Supabase-Client (Browser)
supabase/server.ts Supabase-Client (Server)
actions/properties.ts Server Actions (create/update/delete)
actions/tenants.ts Server Actions (create/update/delete)
types.ts TypeScript-Typen (= echtes Schema)
middleware.ts Session-Refresh
supabase/
schema-reference.sql Doku des bestehenden Schemas (nicht ausführen)
properties (Objekt) ← mieter (über prop_id)
einnahmen · kosten · kredite · verbrauch · notizen · termine · ibans
(alle mit prop_id → properties.id)
Jede Zeile gehört genau einem Vermieter (user_id = auth.uid()),
abgesichert per Row-Level-Security.
mieter_positionen — id, user_id, mieter_id → mieter, bezeichnung, betrag,
umlageschluessel, jahr, umlagefaehig, created_at. RLS: auth.uid() = user_id.
Per Migration add_mieter_positionen angewendet — bestehende Daten unberührt.
Hinweis zur Bewertung: Bodenrichtwerte gibt es offiziell über die BORIS-Portale der Bundesländer. Vergleichspreise aus Immobilienportalen sind nicht frei/legal per API verfügbar — diese Phase bewusst später planen.