{"id":49359001,"url":"https://github.com/guilycst/goatth-penguinui","last_synced_at":"2026-04-27T15:02:34.115Z","repository":{"id":344188725,"uuid":"1180388660","full_name":"guilycst/GoATTH-penguinui","owner":"guilycst","description":"Server Side Rendering for go backends using Go + Alpine.js + Tailwind + Templ and HTMX","archived":false,"fork":false,"pushed_at":"2026-04-24T00:43:39.000Z","size":74829,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-24T01:17:59.331Z","etag":null,"topics":["alpine","alpinejs","go","golang","serverside-rendering","tailwindcss","template"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"SalarHoushvand/penguinui-components","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/guilycst.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"agents.md","dco":null,"cla":null}},"created_at":"2026-03-13T01:50:43.000Z","updated_at":"2026-04-23T23:54:55.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/guilycst/GoATTH-penguinui","commit_stats":null,"previous_names":["guilycst/goatth-penguinui"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/guilycst/GoATTH-penguinui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guilycst%2FGoATTH-penguinui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guilycst%2FGoATTH-penguinui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guilycst%2FGoATTH-penguinui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guilycst%2FGoATTH-penguinui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/guilycst","download_url":"https://codeload.github.com/guilycst/GoATTH-penguinui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guilycst%2FGoATTH-penguinui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32341455,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alpine","alpinejs","go","golang","serverside-rendering","tailwindcss","template"],"created_at":"2026-04-27T15:02:26.987Z","updated_at":"2026-04-27T15:02:34.107Z","avatar_url":"https://github.com/guilycst.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GoATTH PenguinUI \n\n\n⚠️ Work-In-Progress\n\nThere is still lots of rough edeges to iron out, most related to preserving Alpine.js state when a wired component is swapped in by HTMX.\n\n**GoATTH**: Go + Templ + Tailwind CSS + HTMX + Alpine.js\n\n## About This Fork\n\nThis is a hard fork of [Penguin UI](https://www.penguinui.com) by Salar Houshvand ([source here](https://github.com/SalarHoushvand/penguinui-components)), transformed from static HTML/Alpine.js components into a complete Go web component library.\n\n\n### What's Changed?\n\n| Original | GoATTH Fork |\n|----------|-------------|\n| Static HTML | Go + Templ templates |\n| CDN assets | Configurable (CDN/Embedded/Custom) |\n| Copy-paste | `go get` importable |\n| Alpine.js only | HTMX + Alpine.js + Go backend |\n\n## Credits\n\n- **Original**: [Penguin UI](https://www.penguinui.com) by [Salar Houshvand](https://x.com/salar_houshvand)\n- **License**: MIT (preserved from original)\n\n## CSS Integration\n\nGoATTH ships a CLI tool that extracts the pre-built Tailwind CSS from the embedded assets. Client applications use this instead of manually copying CSS files.\n\n```bash\n# Via go tool (recommended — version-pinned in go.mod)\ngo tool goatth -out=css/goatth-base.css\n\n# Or via go run (for one-off use)\ngo run github.com/guilycst/GoATTH-penguinui/cmd/goatth@latest -out=goatth-base.css\n```\n\nThen import it in your Tailwind entry point:\n\n```css\n@import \"tailwindcss\";\n@import \"./goatth-base.css\";\n```\n\nSee [docs/USAGE.md](docs/USAGE.md) for full setup instructions.\n\n## Project Structure\n\n```\nGoATTH-penguinui/\n├── cmd/\n│   ├── server/              # Demo server\n│   └── goatth/              # CSS extraction CLI tool\n├── components/              # GoATTH component library (32 components)\n│   └── badge/\n│       ├── types.go         # Configuration types\n│       └── badge.templ      # Templ component\n├── assets/\n│   ├── embed.go             # Embedded assets + StylesCSS() accessor\n│   ├── styles.css           # Compiled Tailwind CSS\n│   ├── js/                  # Alpine.js, HTMX, plugins\n│   └── fonts/               # TOTVS brand fonts\n├── internal/\n│   └── pages/demo/          # Demo pages\n├── tests/e2e/               # Playwright E2E tests\n└── docs/                    # Integration guides\n```\n\n## Running the Demo\n\n### Quick Start (Recommended: Air with Live Reload)\n\n```bash\n# Install dependencies (including Air)\nmake install\nmake install-air\n\n# Run with live reload (auto-rebuilds on file changes)\nmake dev-air\n\n# Server will start on http://localhost:8090\n# Accordion Demo: http://localhost:8090/components/accordion\n# Button Demo: http://localhost:8090/components/button\n```\n\n### Standard Development\n\n```bash\n# Install dependencies\nmake install\n\n# Run the demo server\nmake dev\n# or\ngo run cmd/server/main.go\n\n# Server will start on http://localhost:8090\n# - Original PenguinUI: http://localhost:8090/original/\n# - GoATTH Components: http://localhost:8090/gottha/\n```\n\n## Running E2E Tests\n\nE2E tests use [playwright-go](https://github.com/playwright-community/playwright-go) (following the tks-console pattern) for Go-based browser automation.\n\n```bash\n# Using just (from repo root)\njust gp-test-e2e                    # Run all E2E tests\njust gp-test-e2e-one TestButton     # Run specific test\n\n# Or directly\ngo test ./GoATTH-penguinui/tests/e2e/... -v\n\n# First time setup - install Playwright browsers\njust gp-install-playwright\n# or\ngo install github.com/playwright-community/playwright-go/cmd/playwright@v0.5700.1\nplaywright install chromium\n```\n\n### Test Results\n\nTests automatically:\n- Start the demo server\n- Run browser automation tests\n- Capture screenshots on failures to `test-results/screenshots/`\n- Verify both Original PenguinUI and GoATTH component rendering\n\n### Current Test Coverage\n\n- **Button Component**: Verifies all 8 variants render correctly, HTMX attributes, Alpine.js integration\n- **Screenshots**: Auto-captured for visual debugging\n\n## Component Usage\n\n### Button Component\n\n```go\nimport \"github.com/guilycst/GoATTH-penguinui/components/button\"\n\n// Basic button\n@button.Button(button.Config{\n    Variant: button.Primary,\n    Type:    \"button\",\n}) {\n    Click Me\n}\n\n// With HTMX\n@button.Button(button.Config{\n    Variant: button.Primary,\n    HTMX: \u0026button.HTMXConfig{\n        Post:   \"/api/action\",\n        Target: \"#result\",\n        Swap:   \"innerHTML\",\n    },\n}) {\n    Submit\n}\n\n// With Alpine.js\n@button.Button(button.Config{\n    Variant: button.Primary,\n    Alpine: \u0026button.AlpineConfig{\n        OnClick: \"modalIsOpen = true\",\n    },\n}) {\n    Open Modal\n}\n```\n\n## Development\n\n### Building\n\n```bash\nmake build\n```\n\n### Generating Templ Files\n\n```bash\nmake generate\n```\n\n### Testing\n\n```bash\n# Go tests\nmake test\n\n# E2E tests\nmake test-e2e\n```\n\n## License\n\nMIT License - See original [Penguin UI](https://www.penguinui.com/docs/license) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguilycst%2Fgoatth-penguinui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguilycst%2Fgoatth-penguinui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguilycst%2Fgoatth-penguinui/lists"}