Files
BrewMaster/main.go
Eli Winderickx f3032674f6 feat: implement initial BrewMaster TUI skeleton
Co-authored-by: aider (ollama_chat/gemma4:31b) <aider@aider.chat>
2026-04-13 20:34:33 +02:00

68 lines
1.6 KiB
Go

package main
import (
"fmt"
"github.com/rivo/tview"
"github.com/gdamore/tcell/v2"
)
type Brew struct {
Name string
Status string
Progress string
}
func main() {
app := tview.NewApplication()
// Mock data for active brews
brews := []Brew{
{Name: "Belgian Tripel", Status: "Fermenting", Progress: "60%"},
{Name: "West Coast IPA", Status: "Boiling", Progress: "20%"},
{Name: "Imperial Stout", Status: "Conditioning", Progress: "90%"},
{Name: "Saison", Status: "Mashing", Progress: "10%"},
}
// Header
header := tview.NewTextView().
SetTextAlign(tview.AlignCenter).
SetText(" BrewMaster - Active Brews Dashboard ")
header.SetBorder(true).SetBorderColor(tcell.ColorYellow)
// Table for brews
table := tview.NewTable().
SetBorders(true).
SetSelectable(true, false)
// Set table headers
headers := []string{"Beer Name", "Status", "Progress"}
for i, h := range headers {
table.SetCell(0, i, tview.NewTableCell(h).SetTextColor(tcell.ColorYellow).SetSelectable(false))
}
// Populate table with mock data
for i, brew := range brews {
row := i + 1
table.SetCell(row, 0, tview.NewTableCell(brew.Name))
table.SetCell(row, 1, tview.NewTableCell(brew.Status))
table.SetCell(row, 2, tview.NewTableCell(brew.Progress))
}
// Footer
footer := tview.NewTextView().
SetTextAlign(tview.AlignCenter).
SetText(" Press Ctrl+C to exit ")
// Layout: Vertical flex
flex := tview.NewFlex().
SetDirection(tview.FlexRow).
AddItem(header, 1, 1, false).
AddItem(table, 0, 1, true).
AddItem(footer, 1, 1, false)
if err := app.SetRoot(flex, true).Run(); err != nil {
fmt.Printf("Error running application: %v\n", err)
}
}