- Go module at github.com/felt-app/felt with go-libsql pinned to commit hash - Full directory structure per research recommendations (cmd/leaf, internal/*, frontend/) - Makefile with build, run, run-dev, test, frontend, all, clean targets - LibSQL database with WAL mode, foreign keys, and embedded migration runner - SvelteKit SPA stub served via go:embed - Package stubs for all internal packages (server, nats, store, auth, clock, etc.) - go build and go vet pass cleanly Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/felt-app/felt/internal/store"
|
|
)
|
|
|
|
func main() {
|
|
dataDir := flag.String("data-dir", "./data", "Data directory for database and files")
|
|
addr := flag.String("addr", ":8080", "HTTP listen address")
|
|
devMode := flag.Bool("dev", false, "Enable development mode (applies dev seed data)")
|
|
flag.Parse()
|
|
|
|
log.SetFlags(log.LstdFlags | log.Lmsgprefix)
|
|
log.SetPrefix("felt: ")
|
|
|
|
log.Printf("starting (data-dir=%s, addr=%s, dev=%v)", *dataDir, *addr, *devMode)
|
|
|
|
// Open database (runs migrations automatically)
|
|
db, err := store.Open(*dataDir, *devMode)
|
|
if err != nil {
|
|
log.Fatalf("failed to open database: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
// Check first-run setup status
|
|
needsSetup, err := db.NeedsSetup()
|
|
if err != nil {
|
|
log.Fatalf("failed to check setup status: %v", err)
|
|
}
|
|
if needsSetup {
|
|
log.Printf("no operators found - first-run setup required")
|
|
log.Printf("POST /api/v1/setup to create first admin operator")
|
|
}
|
|
|
|
// Verify database is working
|
|
var one int
|
|
if err := db.QueryRow("SELECT 1").Scan(&one); err != nil {
|
|
log.Fatalf("database health check failed: %v", err)
|
|
}
|
|
|
|
log.Printf("database ready")
|
|
|
|
// Placeholder for HTTP server (will be implemented in Plan A)
|
|
_ = addr
|
|
fmt.Fprintf(os.Stderr, "felt: ready (database operational, HTTP server not yet implemented)\n")
|
|
}
|