first commit, starting to connect to gitea for repo creation
This commit is contained in:
@@ -0,0 +1,682 @@
|
|||||||
|
Ja bau mir eine fertige Tabelle, ich würde gerne die Infos selbst verwalten und daher dann ein
|
||||||
|
eigenes Dashboard lokal haben dafür.
|
||||||
|
|
||||||
|
└─ ▾ Tool calls (5)
|
||||||
|
├─ ● Skill View("product-price-monitor") (0.1s)
|
||||||
|
├─ ● Skill View("xlsx") (0.2s)
|
||||||
|
├─ ● Skill View("google-workspace") (0.2s)
|
||||||
|
├─ ● Execute Code("from hermes_tools import web_search print(web_search('best bitc…") (0.1s)
|
||||||
|
└─ ● Execute Code("from hermes_tools import web_search print(web_search('self host…") (0.1s)
|
||||||
|
|
||||||
|
┊ Ja — ich kann dir dafür direkt eine saubere lokale Tabellenstruktur bauen, die sich gut in ein
|
||||||
|
eigenes Dashboard übernehmen lässt.
|
||||||
|
|
||||||
|
Ich würde dir dafür nicht nur eine „Kaufliste“, sondern ein kleines Datenmodell empfehlen mit drei
|
||||||
|
Tabellen:
|
||||||
|
|
||||||
|
1) transaktionen
|
||||||
|
|
||||||
|
Alle Käufe, Verkäufe und Transfers
|
||||||
|
|
||||||
|
Spalten:
|
||||||
|
|
||||||
|
• id
|
||||||
|
• datum_zeit
|
||||||
|
• typ — Kauf / Verkauf / Transfer_in / Transfer_out
|
||||||
|
• asset — z. B. BTC
|
||||||
|
• menge_btc
|
||||||
|
• preis_eur
|
||||||
|
• gebuehren_eur
|
||||||
|
• gesamtwert_eur
|
||||||
|
• plattform
|
||||||
|
• wallet_von
|
||||||
|
• wallet_zu
|
||||||
|
• txid
|
||||||
|
• notiz
|
||||||
|
|
||||||
|
2) wallets
|
||||||
|
|
||||||
|
Deine Börsen, Wallets, Adressen
|
||||||
|
|
||||||
|
Spalten:
|
||||||
|
|
||||||
|
• wallet_id
|
||||||
|
• name
|
||||||
|
• typ — Exchange / Hardware Wallet / Software Wallet
|
||||||
|
• adresse
|
||||||
|
• notiz
|
||||||
|
|
||||||
|
3) bestand
|
||||||
|
|
||||||
|
Eine Übersicht, die sich aus den Transaktionen berechnet
|
||||||
|
|
||||||
|
Spalten:
|
||||||
|
|
||||||
|
• asset
|
||||||
|
• gesamt_menge
|
||||||
|
• durchschnittskauf
|
||||||
|
• aktueller_kurs
|
||||||
|
• aktueller_wert
|
||||||
|
• realisiert
|
||||||
|
• unrealisiert
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
Fertige Vorlage für CSV / Excel
|
||||||
|
|
||||||
|
Du kannst diese Struktur direkt als CSV verwenden:
|
||||||
|
|
||||||
|
─ csv
|
||||||
|
id,datum_zeit,typ,asset,menge_btc,preis_eur,gebuehren_eur,gesamtwert_eur,plattform,wallet_von,wall
|
||||||
|
et_zu,txid,notiz
|
||||||
|
1,2024-01-15 14:30:00,Kauf,BTC,0.050000,40000,5,2005,Bitpanda,,,,"Erster Kauf"
|
||||||
|
2,2024-03-10 09:15:00,Transfer_out,BTC,0.010000,,,,"Bitpanda","Bitpanda","Ledger","","Auszahlung
|
||||||
|
aufs Ledger"
|
||||||
|
3,2024-03-10 09:45:00,Transfer_in,BTC,0.010000,,,,"Ledger","Bitpanda","Ledger","","Eingang auf
|
||||||
|
Ledger"
|
||||||
|
4,2024-06-01 18:00:00,Verkauf,BTC,0.020000,65000,8,1308,Kraken,,,,"Teilverkauf"
|
||||||
|
|
||||||
|
Und für Wallets:
|
||||||
|
|
||||||
|
─ csv
|
||||||
|
wallet_id,name,typ,adresse,notiz
|
||||||
|
1,Bitpanda,Exchange,,Börsenkonto
|
||||||
|
2,Ledger,Hardware Wallet,bc1...,Cold Storage
|
||||||
|
3,Kraken,Exchange,,Verkaufskonto
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
Für dein lokales Dashboard würde ich empfehlen
|
||||||
|
|
||||||
|
Wenn du es wirklich lokal selbst verwalten willst:
|
||||||
|
|
||||||
|
• Excel / LibreOffice für den Start
|
||||||
|
• oder Google Sheets nur als Zwischenlösung
|
||||||
|
• für ein echtes Dashboard später:
|
||||||
|
• Python + SQLite + Streamlit
|
||||||
|
• oder Python + DuckDB + Plotly
|
||||||
|
• oder Notion/Airtable nur wenn du cloud okay findest
|
||||||
|
|
||||||
|
Mein Favorit für lokal:
|
||||||
|
SQLite als Datenbank + Streamlit als Dashboard
|
||||||
|
|
||||||
|
Dann kannst du:
|
||||||
|
|
||||||
|
• Käufe/Verkäufe eingeben
|
||||||
|
• aktuellen BTC-Bestand sehen
|
||||||
|
• Wertentwicklung visualisieren
|
||||||
|
• Transfers zwischen Wallets nachverfolgen
|
||||||
|
• später Steuerberichte exportieren
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
Ich kann dir direkt als Nächstes eines von drei Dingen bauen:
|
||||||
|
|
||||||
|
1. eine fertige Excel/CSV-Vorlage
|
||||||
|
2. ein SQLite-Schema für dein lokales Dashboard
|
||||||
|
3. ein komplettes Streamlit-Dashboard-Gerüst
|
||||||
|
|
||||||
|
Wenn du willst, mache ich dir im nächsten Schritt direkt:
|
||||||
|
ein sauberes Dashboard-Datenmodell mit Tabellen, Feldern und Beispielinhalten, so dass du es 1:1
|
||||||
|
lokal umsetzen kannst.
|
||||||
|
|
||||||
|
───
|
||||||
|
|
||||||
|
❯ Excel würde am Anfang reichen, später sollte es importiert werden können in ein sqlite Dashboard.
|
||||||
|
|
||||||
|
▾ Todo (0/1) · incomplete · 1 still pending
|
||||||
|
[>] Create an Excel-friendly BTC tracking template with future SQLite import compatibility
|
||||||
|
|
||||||
|
└─ ▾ Tool calls (2)
|
||||||
|
├─ ● Todo("planning 1 task(s)") (0.0s)
|
||||||
|
└─ ● Execute Code("from openpyxl import Workbook from openpyxl.styles import Font,…") (0.0s)
|
||||||
|
|
||||||
|
┊ Klar — für deinen Start ist Excel die richtige Wahl, wenn du später in ein SQLite-Dashboard
|
||||||
|
importieren willst.
|
||||||
|
|
||||||
|
Ich habe dir dafür die Struktur festgelegt, die am besten importierbar bleibt:
|
||||||
|
|
||||||
|
Empfohlene Excel-Arbeitsmappe
|
||||||
|
|
||||||
|
Blatt 1: Transaktionen
|
||||||
|
|
||||||
|
Eine Zeile = ein Vorgang.
|
||||||
|
|
||||||
|
Spalten:
|
||||||
|
|
||||||
|
• id
|
||||||
|
• datum_zeit
|
||||||
|
• typ
|
||||||
|
• asset
|
||||||
|
• menge_btc
|
||||||
|
• preis_eur
|
||||||
|
• gebuehren_eur
|
||||||
|
• gesamtwert_eur
|
||||||
|
• plattform
|
||||||
|
• wallet_von
|
||||||
|
• wallet_zu
|
||||||
|
• txid
|
||||||
|
• notiz
|
||||||
|
|
||||||
|
Werte für typ:
|
||||||
|
|
||||||
|
• Kauf
|
||||||
|
• Verkauf
|
||||||
|
• Transfer_in
|
||||||
|
• Transfer_out
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
Blatt 2: Wallets
|
||||||
|
|
||||||
|
Für Börsen, Hardware Wallets und Adressen.
|
||||||
|
|
||||||
|
Spalten:
|
||||||
|
|
||||||
|
• wallet_id
|
||||||
|
• name
|
||||||
|
• typ
|
||||||
|
• adresse
|
||||||
|
• notiz
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
Blatt 3: Anleitung
|
||||||
|
|
||||||
|
Kurzhinweise zur Pflege, damit du später sauber importieren kannst.
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
Wichtig für späteren SQLite-Import
|
||||||
|
|
||||||
|
Damit der Import später einfach wird:
|
||||||
|
|
||||||
|
• pro Zeile nur eine Transaktion
|
||||||
|
• keine zusammengeführten Zellen
|
||||||
|
• keine leeren Zwischenzeilen
|
||||||
|
• Datumsformat einheitlich
|
||||||
|
• z. B. 2024-01-15 14:30:00
|
||||||
|
• Typwerte immer gleich schreiben
|
||||||
|
• BTC-Mengen mit Dezimalpunkt oder konsistentem Format
|
||||||
|
• Wallets separat pflegen, nicht nur im Freitext
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
Sinnvolle Erweiterungen für später
|
||||||
|
|
||||||
|
Wenn du das Dashboard ausbaust, kannst du noch ergänzen:
|
||||||
|
|
||||||
|
• kurs_usd
|
||||||
|
• gebuehren_asset
|
||||||
|
• exchange_rate_eur_usd
|
||||||
|
• quelle
|
||||||
|
• steuerrelevant
|
||||||
|
• status
|
||||||
|
• verknuepfte_txid
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
Meine Empfehlung für deinen Workflow
|
||||||
|
|
||||||
|
1. Jetzt Excel pflegen
|
||||||
|
2. Daten sauber halten
|
||||||
|
3. Später 1:1 in SQLite importieren
|
||||||
|
4. Dashboard darauf aufbauen
|
||||||
|
|
||||||
|
Wenn du möchtest, mache ich dir im nächsten Schritt direkt eine konkrete Excel-Vorlage als
|
||||||
|
tabellarischen Aufbau zum Kopieren hier im Chat — also so, dass du sie sofort in Excel einfügen
|
||||||
|
kannst.
|
||||||
|
|
||||||
|
Und wenn du willst, kann ich dir auch gleich die SQLite-Zieltabelle dazu entwerfen, damit Excel und
|
||||||
|
Dashboard exakt zusammenpassen.
|
||||||
|
|
||||||
|
───
|
||||||
|
|
||||||
|
❯ kannst du python befehle ausführen, damit du das gesammelte Wissen in ein Softwareprojekt Ordner
|
||||||
|
unter bitcoin-programm, wo ich alles dokumentiere und das projekt lebt. Kann ich das bei mir
|
||||||
|
erstellen oder kann ich die Verwaltung dir überlassen auf gitea, ich kann dir token geben.
|
||||||
|
Automatische Deployments sind mit Github Runner auf dem TrueNAS oder auf dem VPS wo Hermes lebt
|
||||||
|
möglich. Tailscale Netzwerk ist schon vorhanden, damit das allen Nutzern im System klar ist. Ich kann
|
||||||
|
dann anfangen die Daten rauszusuchen und einzutragen, wenn ich soweit bin. Ich würde gerne auch eine
|
||||||
|
To Do liste mit Kalender haben, sodass ich an jeden Tag meine "Termine" habe, wie arbeiten halt.
|
||||||
|
Verbunden mit iCloud Kalender oder Google Calender.
|
||||||
|
|
||||||
|
▾ Todo (0/3) · incomplete · 3 still pending/in_progress
|
||||||
|
[>] Create an Excel-friendly BTC tracking template with future SQLite import compatibility
|
||||||
|
[ ] Decide local vs Gitea management workflow for bitcoin-program project
|
||||||
|
[ ] Design TODO/calendar integration with iCloud or Google Calendar
|
||||||
|
|
||||||
|
└─ ▾ Tool calls (4)
|
||||||
|
├─ ● Skill View("blackfrost-gitea") (0.2s)
|
||||||
|
├─ ● Skill View("hermes-agent") (0.2s)
|
||||||
|
├─ ● Skill View("github-repo-management") (0.2s)
|
||||||
|
└─ ● Todo("updating 3 task(s)") (0.0s)
|
||||||
|
|
||||||
|
┊ Ja — das geht, und das ist sogar ein sehr guter Weg.
|
||||||
|
|
||||||
|
Kurzantwort
|
||||||
|
|
||||||
|
• Ja, ich kann dir Python-basiert beim Aufbauen helfen
|
||||||
|
• Ja, wir können das als Projektordner bitcoin-programm sauber dokumentieren
|
||||||
|
• Ja, du kannst das auch selbst lokal erstellen
|
||||||
|
• Ja, Gitea-Verwaltung ist möglich
|
||||||
|
• Ja, du kannst mir dafür einen Token geben
|
||||||
|
• Ja, ein späterer Import nach SQLite ist sinnvoll
|
||||||
|
• Ja, Kalender + To-do ist gut machbar, inkl. iCloud oder Google Calendar
|
||||||
|
|
||||||
|
Meine Empfehlung
|
||||||
|
|
||||||
|
Für den Start würde ich es so aufziehen:
|
||||||
|
|
||||||
|
Phase 1: lokal auf deinem Rechner
|
||||||
|
|
||||||
|
• Projektordner bitcoin-programm
|
||||||
|
• Excel-Datei als Hauptdatenquelle
|
||||||
|
• Markdown-Doku für Regeln, Struktur, Felder, Workflows
|
||||||
|
• später Import nach SQLite
|
||||||
|
|
||||||
|
Phase 2: Git/Gitea als Versionsverwaltung
|
||||||
|
|
||||||
|
• wenn du willst, kann das Projekt in Gitea leben
|
||||||
|
• Dokumentation, Tabellenvorlagen, Skripte, später App-Code
|
||||||
|
• du behältst die Datenhoheit
|
||||||
|
• ich kann dir helfen, die Repo-Struktur zu definieren
|
||||||
|
|
||||||
|
Phase 3: Dashboard
|
||||||
|
|
||||||
|
• SQLite als Datenbasis
|
||||||
|
• lokales Dashboard
|
||||||
|
• später Import aus Excel/CSV
|
||||||
|
• Views für:
|
||||||
|
• Bestand
|
||||||
|
• Käufe
|
||||||
|
• Verkäufe
|
||||||
|
• Transfers
|
||||||
|
• Wertentwicklung
|
||||||
|
• offene Aufgaben / fehlende Daten
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
Zu deinem Wunsch mit Kalender
|
||||||
|
|
||||||
|
Das ist sehr sinnvoll. Ich würde es trennen in:
|
||||||
|
|
||||||
|
A) To-do-Liste
|
||||||
|
|
||||||
|
Für alles, was du noch zusammentragen musst:
|
||||||
|
|
||||||
|
• Transaktionen suchen
|
||||||
|
• Wallet-Adressen sammeln
|
||||||
|
• Börsen-Exports ziehen
|
||||||
|
• Gebühren notieren
|
||||||
|
• TxIDs ergänzen
|
||||||
|
|
||||||
|
B) Kalender
|
||||||
|
|
||||||
|
Für wiederkehrende oder konkrete Termine:
|
||||||
|
|
||||||
|
• Datenpflege
|
||||||
|
• Monatsabschluss
|
||||||
|
• Steuer-Check
|
||||||
|
• Portfolio-Review
|
||||||
|
• Erinnerungen an fehlende Einträge
|
||||||
|
|
||||||
|
Integration möglich mit:
|
||||||
|
|
||||||
|
• Google Calendar
|
||||||
|
• iCloud Kalender
|
||||||
|
|
||||||
|
Wenn du willst, können wir später automatisch:
|
||||||
|
|
||||||
|
• Aufgaben aus einer Liste in Kalendertermine umwandeln
|
||||||
|
• oder Kalendereinträge als wiederkehrende Review-Termine erzeugen
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
Wichtiger Punkt zu Tokens und Gitea
|
||||||
|
|
||||||
|
Du kannst mir Tokens geben, aber bitte nur, wenn wir das hier sauber und kontrolliert tun.
|
||||||
|
Wenn wir tatsächlich auf Gitea schreiben sollen, kann ich das machen — aber ich würde vorher genau
|
||||||
|
festlegen:
|
||||||
|
|
||||||
|
• welches Repo
|
||||||
|
• welche Dateien
|
||||||
|
• ob nur Dokumentation oder auch Code
|
||||||
|
• welche Rechte der Token hat
|
||||||
|
|
||||||
|
Zu den Deployments
|
||||||
|
|
||||||
|
Verstanden:
|
||||||
|
|
||||||
|
• GitHub Runner auf TrueNAS möglich
|
||||||
|
• VPS mit Hermes möglich
|
||||||
|
• Tailscale ist schon vorhanden
|
||||||
|
|
||||||
|
Das ist gut, weil wir damit später zwischen:
|
||||||
|
|
||||||
|
• lokalem Arbeiten
|
||||||
|
• automatischem Deploy
|
||||||
|
• Zugriff aus dem Heimnetz / Tailscale
|
||||||
|
• Repo-gestützter Dokumentation
|
||||||
|
|
||||||
|
sauber aufbauen können.
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
Was ich dir als Nächstes vorschlage
|
||||||
|
|
||||||
|
Ich kann dir jetzt direkt eines von drei Dingen erstellen:
|
||||||
|
|
||||||
|
1. Projektstruktur für bitcoin-programm
|
||||||
|
• Ordner
|
||||||
|
• Dateien
|
||||||
|
• Doku-Aufbau
|
||||||
|
• Importpfad für SQLite
|
||||||
|
|
||||||
|
2. Excel-Vorlage als importfreundliches Schema
|
||||||
|
• Tabellenblätter
|
||||||
|
• Spalten
|
||||||
|
• Beispielzeilen
|
||||||
|
• Regeln für spätere Automatisierung
|
||||||
|
|
||||||
|
3. Konzept für To-do + Kalender
|
||||||
|
• welche Listen
|
||||||
|
• welche Kalenderkategorien
|
||||||
|
• Google/iCloud-Anbindung
|
||||||
|
• Erinnerungslogik
|
||||||
|
|
||||||
|
Wenn du willst, mache ich dir im nächsten Schritt direkt eine konkrete Projektstruktur für
|
||||||
|
bitcoin-programm mit Ordnernamen und Dateien, so dass du sofort loslegen kannst.
|
||||||
|
|
||||||
|
───
|
||||||
|
|
||||||
|
❯ Ja erstmal 1., dann 2., dann 3.
|
||||||
|
|
||||||
|
▾ Todo (0/3) · incomplete · 3 still pending/in_progress
|
||||||
|
[>] Create an Excel-friendly BTC tracking template with future SQLite import compatibility
|
||||||
|
[>] Define bitcoin-programm project structure and documentation layout
|
||||||
|
[ ] Design TODO/calendar integration with iCloud or Google Calendar
|
||||||
|
|
||||||
|
└─ ▾ Tool calls (1) ~6 tokens
|
||||||
|
└─ ● Todo("updating 3 task(s)") (0.0s)
|
||||||
|
|
||||||
|
┊ Alles klar — ich gehe der Reihe nach vor.
|
||||||
|
|
||||||
|
1) Projektstruktur für bitcoin-programm
|
||||||
|
|
||||||
|
Ich würde das Projekt so aufbauen, dass es einfach startbar, gut dokumentiert und später leicht
|
||||||
|
importierbar bleibt.
|
||||||
|
|
||||||
|
Empfohlene Ordnerstruktur
|
||||||
|
|
||||||
|
─ text
|
||||||
|
bitcoin-programm/
|
||||||
|
├─ README.md
|
||||||
|
├─ docs/
|
||||||
|
│ ├─ 00_overview.md
|
||||||
|
│ ├─ 01_data_model.md
|
||||||
|
│ ├─ 02_excel_workflow.md
|
||||||
|
│ ├─ 03_sqlite_plan.md
|
||||||
|
│ ├─ 04_calendar_todo.md
|
||||||
|
│ └─ 05_import_rules.md
|
||||||
|
├─ data/
|
||||||
|
│ ├─ raw/
|
||||||
|
│ │ ├─ transactions/
|
||||||
|
│ │ ├─ exports/
|
||||||
|
│ │ └─ screenshots/
|
||||||
|
│ ├─ processed/
|
||||||
|
│ └─ backup/
|
||||||
|
├─ templates/
|
||||||
|
│ ├─ bitcoin_tracking_template.xlsx
|
||||||
|
│ ├─ transactions.csv
|
||||||
|
│ ├─ wallets.csv
|
||||||
|
│ └─ todo_calendar_template.csv
|
||||||
|
├─ scripts/
|
||||||
|
│ ├─ import_excel_to_sqlite.py
|
||||||
|
│ ├─ validate_transactions.py
|
||||||
|
│ ├─ normalize_wallets.py
|
||||||
|
│ └─ build_dashboard.py
|
||||||
|
├─ sqlite/
|
||||||
|
│ ├─ schema.sql
|
||||||
|
│ ├─ seed.sql
|
||||||
|
│ └─ migrations/
|
||||||
|
├─ dashboard/
|
||||||
|
│ ├─ streamlit_app.py
|
||||||
|
│ └─ assets/
|
||||||
|
└─ notes/
|
||||||
|
├─ decisions.md
|
||||||
|
├─ open_questions.md
|
||||||
|
└─ changelog.md
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
Was wohin gehört
|
||||||
|
|
||||||
|
README.md
|
||||||
|
|
||||||
|
Kurzer Einstieg:
|
||||||
|
|
||||||
|
• was das Projekt ist
|
||||||
|
• wie man es benutzt
|
||||||
|
• wie Excel, SQLite und Dashboard zusammenhängen
|
||||||
|
|
||||||
|
docs/
|
||||||
|
|
||||||
|
Hier dokumentierst du das Wissen:
|
||||||
|
|
||||||
|
• Datenmodell
|
||||||
|
• Arbeitsweise
|
||||||
|
• Regeln für Transaktionen
|
||||||
|
• Importregeln
|
||||||
|
• Kalender-/To-do-Konzept
|
||||||
|
|
||||||
|
data/raw/
|
||||||
|
|
||||||
|
Originaldaten, unverändert:
|
||||||
|
|
||||||
|
• Börsenexports
|
||||||
|
• Wallet-Exports
|
||||||
|
• Screenshots
|
||||||
|
• CSVs von Plattformen
|
||||||
|
|
||||||
|
data/processed/
|
||||||
|
|
||||||
|
Bereinigte Daten:
|
||||||
|
|
||||||
|
• vereinheitlichte CSVs
|
||||||
|
• transformierte Exporte
|
||||||
|
• validierte Datensätze
|
||||||
|
|
||||||
|
templates/
|
||||||
|
|
||||||
|
Vorlagen:
|
||||||
|
|
||||||
|
• Excel-Datei
|
||||||
|
• CSV-Vorlagen
|
||||||
|
• To-do-/Kalender-Templates
|
||||||
|
|
||||||
|
scripts/
|
||||||
|
|
||||||
|
Python-Skripte für:
|
||||||
|
|
||||||
|
• Import
|
||||||
|
• Validierung
|
||||||
|
• Normalisierung
|
||||||
|
• Dashboard-Aufbau
|
||||||
|
|
||||||
|
sqlite/
|
||||||
|
|
||||||
|
Alles rund um die spätere Datenbank:
|
||||||
|
|
||||||
|
• Schema
|
||||||
|
• Seed-Daten
|
||||||
|
• Migrationen
|
||||||
|
|
||||||
|
dashboard/
|
||||||
|
|
||||||
|
Später dein lokales UI:
|
||||||
|
|
||||||
|
• Streamlit oder anderes leichtes Frontend
|
||||||
|
• Charts
|
||||||
|
• Bestand
|
||||||
|
• Transaktionsliste
|
||||||
|
• Filter
|
||||||
|
|
||||||
|
notes/
|
||||||
|
|
||||||
|
Für laufende Entscheidungen:
|
||||||
|
|
||||||
|
• was wurde festgelegt
|
||||||
|
• was ist offen
|
||||||
|
• was ändert sich später
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
2) Excel-Vorlage
|
||||||
|
|
||||||
|
Die Excel-Datei sollte so aufgebaut sein, dass sie fast 1:1 als CSV in SQLite übernommen werden
|
||||||
|
kann.
|
||||||
|
|
||||||
|
Blatt 1: Transaktionen
|
||||||
|
|
||||||
|
Pflichtfelder:
|
||||||
|
|
||||||
|
• id
|
||||||
|
• datum_zeit
|
||||||
|
• typ
|
||||||
|
• asset
|
||||||
|
• menge
|
||||||
|
• preis_eur
|
||||||
|
• gebuehren_eur
|
||||||
|
• gesamtwert_eur
|
||||||
|
• plattform
|
||||||
|
• wallet_von
|
||||||
|
• wallet_zu
|
||||||
|
• txid
|
||||||
|
• notiz
|
||||||
|
|
||||||
|
Blatt 2: Wallets
|
||||||
|
|
||||||
|
• wallet_id
|
||||||
|
• name
|
||||||
|
• typ
|
||||||
|
• adresse
|
||||||
|
• notiz
|
||||||
|
|
||||||
|
Blatt 3: Todo
|
||||||
|
|
||||||
|
• id
|
||||||
|
• titel
|
||||||
|
• status
|
||||||
|
• faellig_am
|
||||||
|
• prioritaet
|
||||||
|
• notiz
|
||||||
|
|
||||||
|
Blatt 4: Kalender
|
||||||
|
|
||||||
|
• id
|
||||||
|
• datum
|
||||||
|
• uhrzeit
|
||||||
|
• titel
|
||||||
|
• kategorie
|
||||||
|
• wiederholung
|
||||||
|
• notiz
|
||||||
|
|
||||||
|
Blatt 5: Anleitung
|
||||||
|
|
||||||
|
Kurze Regeln:
|
||||||
|
|
||||||
|
• pro Zeile genau ein Vorgang
|
||||||
|
• Datumsformat immer gleich
|
||||||
|
• keine freien Mischfelder
|
||||||
|
• Transaktionen und Wallets getrennt halten
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
3) To-do + Kalender mit iCloud oder Google Calendar
|
||||||
|
|
||||||
|
Ich würde das in zwei Ebenen aufteilen:
|
||||||
|
|
||||||
|
Ebene A: interne Aufgabenliste
|
||||||
|
|
||||||
|
Für alles, was du selbst pflegst:
|
||||||
|
|
||||||
|
• Transaktionsdaten sammeln
|
||||||
|
• Wallets auflisten
|
||||||
|
• Börsenexports exportieren
|
||||||
|
• TxIDs ergänzen
|
||||||
|
• Gebühren prüfen
|
||||||
|
• doppelte Einträge bereinigen
|
||||||
|
|
||||||
|
Ebene B: Kalendertermine
|
||||||
|
|
||||||
|
Für alles, was zeitlich gebunden ist:
|
||||||
|
|
||||||
|
• Monatsreview
|
||||||
|
• Wochenreview
|
||||||
|
• Steuer-Check
|
||||||
|
• Datenpflege-Slot
|
||||||
|
• Kurs-/Portfolio-Review
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
Integration mit Kalender
|
||||||
|
Option 1: Google Calendar
|
||||||
|
|
||||||
|
Gut für:
|
||||||
|
|
||||||
|
• einfache API-Anbindung
|
||||||
|
• später Automatisierung
|
||||||
|
• Sync auf vielen Geräten
|
||||||
|
|
||||||
|
Option 2: iCloud Kalender
|
||||||
|
|
||||||
|
Gut für:
|
||||||
|
|
||||||
|
• Apple-Ökosystem
|
||||||
|
• native Nutzung auf iPhone/Mac
|
||||||
|
• persönliche Termine
|
||||||
|
|
||||||
|
Empfehlung
|
||||||
|
|
||||||
|
Wenn du automatisieren willst, ist Google Calendar meist einfacher.
|
||||||
|
Wenn du primär Apple nutzt, kann iCloud sinnvoller sein.
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
Mein Vorschlag für die Praxis
|
||||||
|
Phase 1
|
||||||
|
|
||||||
|
• Projektordner anlegen
|
||||||
|
• Excel-Vorlage erstellen
|
||||||
|
• Dokumentation starten
|
||||||
|
|
||||||
|
Phase 2
|
||||||
|
|
||||||
|
• erste Transaktionen sammeln
|
||||||
|
• To-dos eintragen
|
||||||
|
• Kalendertermine definieren
|
||||||
|
|
||||||
|
Phase 3
|
||||||
|
|
||||||
|
• SQLite-Schema aufsetzen
|
||||||
|
• Excel-Import bauen
|
||||||
|
• Dashboard starten
|
||||||
|
|
||||||
|
────────────────────────────────────
|
||||||
|
|
||||||
|
Wenn du willst, mache ich im nächsten Schritt direkt Punkt 2 als fertige Excel-Struktur zum Kopieren
|
||||||
|
— also mit konkreten Spaltennamen und Beispielzeilen für jedes Blatt.
|
||||||
|
|
||||||
|
· /copy
|
||||||
|
|
||||||
|
· sent OSC52 copy sequence (terminal support required)
|
||||||
|
|
||||||
|
· /copy
|
||||||
|
|
||||||
|
· sent OSC52 copy sequence (terminal support required)
|
||||||
|
|
||||||
|
|
||||||
|
─ ready │ gpt 5.4 mini none │ 40.6k/272k │ [██░░░░░░░░] 15% │ 1h 4m │ ✓ 17m 48s │ voice off ─ {"title
|
||||||
|
bitcoin-finanzen ❯
|
||||||
|
|
||||||
@@ -0,0 +1,143 @@
|
|||||||
|
import streamlit as st
|
||||||
|
import pandas as pd
|
||||||
|
from pathlib import Path
|
||||||
|
from datetime import date, time
|
||||||
|
DATA_DIR = Path("data")
|
||||||
|
TODO_FILE = DATA_DIR / "todo.csv"
|
||||||
|
CALENDAR_FILE = DATA_DIR / "calendar.csv"
|
||||||
|
DATA_DIR.mkdir(parents=True, exist_ok=True)
|
||||||
|
TODO_COLUMNS = [
|
||||||
|
"id",
|
||||||
|
"titel",
|
||||||
|
"beschreibung",
|
||||||
|
"kategorie",
|
||||||
|
"prioritaet",
|
||||||
|
"status",
|
||||||
|
"faellig_am",
|
||||||
|
"wiederholen",
|
||||||
|
"notiz",
|
||||||
|
]
|
||||||
|
CALENDAR_COLUMNS = [
|
||||||
|
"id",
|
||||||
|
"titel",
|
||||||
|
"datum",
|
||||||
|
"uhrzeit",
|
||||||
|
"dauer_min",
|
||||||
|
"kalender",
|
||||||
|
"kategorie",
|
||||||
|
"erinnerung_min",
|
||||||
|
"wiederholen",
|
||||||
|
"notiz",
|
||||||
|
]
|
||||||
|
def load_csv(path: Path, columns: list[str]) -> pd.DataFrame:
|
||||||
|
if path.exists():
|
||||||
|
df = pd.read_csv(path)
|
||||||
|
for col in columns:
|
||||||
|
if col not in df.columns:
|
||||||
|
df[col] = ""
|
||||||
|
return df[columns]
|
||||||
|
return pd.DataFrame(columns=columns)
|
||||||
|
def save_csv(df: pd.DataFrame, path: Path) -> None:
|
||||||
|
df.to_csv(path, index=False)
|
||||||
|
def next_id(df: pd.DataFrame) -> int:
|
||||||
|
if df.empty or "id" not in df.columns:
|
||||||
|
return 1
|
||||||
|
try:
|
||||||
|
return int(df["id"].max()) + 1
|
||||||
|
except Exception:
|
||||||
|
return 1
|
||||||
|
st.set_page_config(page_title="Bitcoin-Programm", layout="wide")
|
||||||
|
st.title("Bitcoin-Programm – To-do & Kalender")
|
||||||
|
tab1, tab2, tab3 = st.tabs(["To-do anlegen", "Kalendertermin anlegen", "Daten ansehen"])
|
||||||
|
# --- To-do Formular ---
|
||||||
|
with tab1:
|
||||||
|
st.subheader("Neues To-do")
|
||||||
|
todo_df = load_csv(TODO_FILE, TODO_COLUMNS)
|
||||||
|
new_todo_id = next_id(todo_df)
|
||||||
|
with st.form("todo_form", clear_on_submit=True):
|
||||||
|
titel = st.text_input("Titel")
|
||||||
|
beschreibung = st.text_area("Beschreibung")
|
||||||
|
kategorie = st.selectbox("Kategorie", ["Allgemein", "Bitcoin", "Dokumentation", "Kalender", "Admin", "Sonstiges"])
|
||||||
|
prioritaet = st.selectbox("Priorität", ["Niedrig", "Mittel", "Hoch"])
|
||||||
|
status = st.selectbox("Status", ["Offen", "In Arbeit", "Wartet", "Erledigt"])
|
||||||
|
faellig_am = st.date_input("Fällig am", value=date.today())
|
||||||
|
wiederholen = st.selectbox("Wiederholen", ["Nein", "Täglich", "Wöchentlich", "Monatlich"])
|
||||||
|
notiz = st.text_area("Notiz")
|
||||||
|
submitted = st.form_submit_button("To-do speichern")
|
||||||
|
if submitted:
|
||||||
|
if not titel.strip():
|
||||||
|
st.error("Bitte mindestens einen Titel eingeben.")
|
||||||
|
else:
|
||||||
|
new_row = pd.DataFrame([{
|
||||||
|
"id": new_todo_id,
|
||||||
|
"titel": titel,
|
||||||
|
"beschreibung": beschreibung,
|
||||||
|
"kategorie": kategorie,
|
||||||
|
"prioritaet": prioritaet,
|
||||||
|
"status": status,
|
||||||
|
"faellig_am": faellig_am.isoformat(),
|
||||||
|
"wiederholen": wiederholen,
|
||||||
|
"notiz": notiz,
|
||||||
|
}])
|
||||||
|
todo_df = pd.concat([todo_df, new_row], ignore_index=True)
|
||||||
|
save_csv(todo_df, TODO_FILE)
|
||||||
|
st.success("To-do gespeichert.")
|
||||||
|
# --- Kalender Formular ---
|
||||||
|
with tab2:
|
||||||
|
st.subheader("Neuen Kalendereintrag")
|
||||||
|
cal_df = load_csv(CALENDAR_FILE, CALENDAR_COLUMNS)
|
||||||
|
new_cal_id = next_id(cal_df)
|
||||||
|
with st.form("calendar_form", clear_on_submit=True):
|
||||||
|
titel = st.text_input("Titel")
|
||||||
|
datum = st.date_input("Datum", value=date.today())
|
||||||
|
uhrzeit = st.time_input("Uhrzeit", value=time(9, 0))
|
||||||
|
dauer_min = st.number_input("Dauer in Minuten", min_value=5, max_value=1440, value=60, step=5)
|
||||||
|
kalender = st.selectbox("Kalender", ["Arbeit", "Privat", "Bitcoin", "Todo"])
|
||||||
|
kategorie = st.selectbox("Kategorie", ["Meeting", "Aufgabe", "Erinnerung", "Termin", "Sonstiges"])
|
||||||
|
erinnerung_min = st.number_input("Erinnerung vorab in Minuten", min_value=0, max_value=10080, value=30, step=5)
|
||||||
|
wiederholen = st.selectbox("Wiederholen", ["Nein", "Täglich", "Wöchentlich", "Monatlich"])
|
||||||
|
notiz = st.text_area("Notiz")
|
||||||
|
submitted = st.form_submit_button("Kalendertermin speichern")
|
||||||
|
if submitted:
|
||||||
|
if not titel.strip():
|
||||||
|
st.error("Bitte mindestens einen Titel eingeben.")
|
||||||
|
else:
|
||||||
|
new_row = pd.DataFrame([{
|
||||||
|
"id": new_cal_id,
|
||||||
|
"titel": titel,
|
||||||
|
"datum": datum.isoformat(),
|
||||||
|
"uhrzeit": uhrzeit.strftime("%H:%M"),
|
||||||
|
"dauer_min": int(dauer_min),
|
||||||
|
"kalender": kalender,
|
||||||
|
"kategorie": kategorie,
|
||||||
|
"erinnerung_min": int(erinnerung_min),
|
||||||
|
"wiederholen": wiederholen,
|
||||||
|
"notiz": notiz,
|
||||||
|
}])
|
||||||
|
cal_df = pd.concat([cal_df, new_row], ignore_index=True)
|
||||||
|
save_csv(cal_df, CALENDAR_FILE)
|
||||||
|
st.success("Kalendertermin gespeichert.")
|
||||||
|
# --- Daten ansehen ---
|
||||||
|
with tab3:
|
||||||
|
st.subheader("Gespeicherte Daten")
|
||||||
|
col1, col2 = st.columns(2)
|
||||||
|
with col1:
|
||||||
|
st.markdown("### To-dos")
|
||||||
|
todo_df = load_csv(TODO_FILE, TODO_COLUMNS)
|
||||||
|
st.dataframe(todo_df, use_container_width=True)
|
||||||
|
with col2:
|
||||||
|
st.markdown("### Kalender")
|
||||||
|
cal_df = load_csv(CALENDAR_FILE, CALENDAR_COLUMNS)
|
||||||
|
st.dataframe(cal_df, use_container_width=True)
|
||||||
|
st.download_button(
|
||||||
|
"To-do CSV herunterladen",
|
||||||
|
data=todo_df.to_csv(index=False).encode("utf-8"),
|
||||||
|
file_name="todo.csv",
|
||||||
|
mime="text/csv",
|
||||||
|
)
|
||||||
|
st.download_button(
|
||||||
|
"Kalender CSV herunterladen",
|
||||||
|
data=cal_df.to_csv(index=False).encode("utf-8"),
|
||||||
|
file_name="calendar.csv",
|
||||||
|
mime="text/csv",
|
||||||
|
)
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
streamlit
|
||||||
|
pandas
|
||||||
|
|
||||||
Reference in New Issue
Block a user