{"id":20509443,"url":"https://github.com/bastean/codexgo","last_synced_at":"2025-07-19T01:37:17.708Z","repository":{"id":211357118,"uuid":"728896854","full_name":"bastean/codexgo","owner":"bastean","description":"Example CRUD project applying Hexagonal Architecture, DDD, EDA, CQRS, BDD, CI, and more... in Go.","archived":false,"fork":false,"pushed_at":"2025-07-07T01:35:02.000Z","size":5132,"stargazers_count":84,"open_issues_count":0,"forks_count":8,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-07-07T02:21:21.314Z","etag":null,"topics":["badgerdb","codexgo","fomantic-ui","gin","go","mongodb","rabbitmq","templ"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bastean.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2023-12-07T23:54:13.000Z","updated_at":"2025-07-07T01:31:17.000Z","dependencies_parsed_at":"2024-01-28T02:32:41.102Z","dependency_job_id":"972ce03f-6dce-40ea-a187-e5a2d0b2dc13","html_url":"https://github.com/bastean/codexgo","commit_stats":null,"previous_names":["bastean/codexgo"],"tags_count":49,"template":true,"template_full_name":null,"purl":"pkg:github/bastean/codexgo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bastean%2Fcodexgo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bastean%2Fcodexgo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bastean%2Fcodexgo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bastean%2Fcodexgo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bastean","download_url":"https://codeload.github.com/bastean/codexgo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bastean%2Fcodexgo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265871388,"owners_count":23842026,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["badgerdb","codexgo","fomantic-ui","gin","go","mongodb","rabbitmq","templ"],"created_at":"2024-11-15T20:24:46.096Z","updated_at":"2025-07-19T01:37:17.692Z","avatar_url":"https://github.com/bastean.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n\n\u003c!-- [![README Logo](https://raw.githubusercontent.com/bastean/codexgo/main/assets/readme/logo.png)](https://github.com/bastean) --\u003e\n\n[![README Logo](assets/readme/logo.png)](https://github.com/bastean/codexgo)\n\n\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n\u003e Example CRUD project applying Hexagonal Architecture, Domain-Driven Design (DDD), Event-Driven Architecture (EDA), Command Query Responsibility Segregation (CQRS), Behavior-Driven Development (BDD), Continuous Integration (CI), and more... in Go.\n\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![License MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n[![Go Report Card](https://goreportcard.com/badge/github.com/bastean/codexgo/v4)](https://goreportcard.com/report/github.com/bastean/codexgo/v4)\n[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](https://github.com/commitizen/cz-cli)\n[![Release It!](https://img.shields.io/badge/%F0%9F%93%A6%F0%9F%9A%80-release--it-orange.svg)](https://github.com/release-it/release-it)\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Upgrade workflow](https://github.com/bastean/codexgo/actions/workflows/upgrade.yml/badge.svg)](https://github.com/bastean/codexgo/actions/workflows/upgrade.yml)\n[![CI workflow](https://github.com/bastean/codexgo/actions/workflows/ci.yml/badge.svg)](https://github.com/bastean/codexgo/actions/workflows/ci.yml)\n[![Release workflow](https://github.com/bastean/codexgo/actions/workflows/release.yml/badge.svg)](https://github.com/bastean/codexgo/actions/workflows/release.yml)\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/bastean/codexgo/v4.svg)](https://pkg.go.dev/github.com/bastean/codexgo/v4)\n[![GitHub Releases](https://img.shields.io/github/v/release/bastean/codexgo.svg)](https://github.com/bastean/codexgo/releases)\n\n\u003c/div\u003e\n\n## Showcase\n\n\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"assets/readme/desktop-home.png\" /\u003e\n\n\u003cimg src=\"assets/readme/desktop-dashboard.png\" /\u003e\n\n\u003cimg width=\"49%\" src=\"assets/readme/mobile-home.png\" /\u003e\n\n\u003cimg width=\"49%\" src=\"assets/readme/mobile-dashboard.png\" /\u003e\n\n\u003cimg src=\"assets/readme/mail-confirm-account.png\" /\u003e\n\n\u003cimg src=\"assets/readme/mail-reset-password.png\" /\u003e\n\n\u003c/div\u003e\n\n## CLI\n\n### Run (Demo)\n\n```bash\ngo run github.com/bastean/codexgo/v4/cmd/codexgo@latest -demo\n```\n\n\u003e [!NOTE]\n\u003e\n\u003e - Demo version does not require any configuration, because the required **ENV** values are already preset.\n\u003e   - Here we can find the **ENV** preset values that are used in the [Demo](internal/pkg/service/env/demo.go).\n\u003e - `In-Memory` implementation will be used for EventBus, CommandBus, QueryBus and Database (`BadgerDB`).\n\u003e - Links to confirm and recover the account are sent through the `Terminal` with the following messages:\n\u003e   - _\"Hi \\\u003cusername\\\u003e, please confirm your account through this link: \\\u003clink\\\u003e\"_.\n\u003e   - _\"Hi \\\u003cusername\\\u003e, please reset your password through this link: \\\u003clink\\\u003e\"_.\n\n### Installation\n\n```bash\ngo install github.com/bastean/codexgo/v4/cmd/codexgo@latest\n```\n\n```bash\ncodexgo -h\n```\n\n```text\n              _________               ________________\n_____________ ______  /_____ ____  __ __  ____/__  __ \\\n_  ___/_  __ \\_  __  / _  _ \\__  |/_/ _  / __  _  / / /\n/ /__  / /_/ // /_/ /  /  __/__\u003e  \u003c   / /_/ /  / /_/ /\n\\___/  \\____/ \\__,_/   \\___/ /_/|_|   \\____/   \\____/\n\nExample CRUD project applying Hexagonal Architecture, DDD, EDA, CQRS, BDD, CI, and more... in Go.\n\nUsage: codexgo [flags]\n\n  -demo\n        Use preset ENV values\n  -env string\n        Path to custom ENV file\n```\n\n### Usage\n\n\u003e [!NOTE]\n\u003e\n\u003e - We can use the [.env.demo.cli](deployments/.env.demo.cli) file or we can create our own `.env` file where we define our own values.\n\u003e   - In the [.env.example.cli](deployments/.env.example.cli) file, we can see the values that can be used.\n\u003e     - If `CODEXGO_SMTP_*` is omitted, the links to confirm and recover the account are sent through the `Terminal` with the following messages:\n\u003e       - _\"Hi \\\u003cusername\\\u003e, please confirm your account through this link: \\\u003clink\\\u003e\"_.\n\u003e       - _\"Hi \\\u003cusername\\\u003e, please reset your password through this link: \\\u003clink\\\u003e\"_.\n\u003e     - We can define our own **SMTP** configuration by simply modifying the `CODEXGO_SMTP_*` variables, then we will be able to receive the links by mail.\n\u003e     - If `CODEXGO_BROKER_*` is omitted, an in-memory EventBus will be used.\n\u003e     - `In-Memory` implementation will be used for CommandBus and QueryBus.\n\u003e     - If `CODEXGO_DATABASE_*` is omitted, a `BadgerDB` in-memory database will be used.\n\u003e     - We can use a file as a database instead of memory by defining the file name in the `CODEXGO_DATABASE_BADGERDB_DSN` variable.\n\n```bash\ncodexgo -env path/to/.env\n```\n\n## Docker\n\n### Run (Demo)\n\n\u003e [!NOTE]\n\u003e\n\u003e - [System Requirements](#locally)\n\u003e - In the Demo version ([.env.demo](deployments/.env.demo)):\n\u003e   - `RabbitMQ` implementation will be used for the EventBus.\n\u003e     - **URL:** `http://localhost:15672`\n\u003e     - **User/Password:** `codexgo-demo`\n\u003e   - `In-Memory` implementation will be used for CommandBus and QueryBus.\n\u003e   - `MongoDB` implementation will be used as Database.\n\u003e     - **Compass:** `mongodb://codexgo-demo:codexgo-demo@localhost:27017`\n\u003e   - `Mailpit` will be used as SMTP to receive emails with the links to confirm and recover the account.\n\u003e     - **URL:** `http://localhost:8025`\n\u003e   - `codexGO` Server.\n\u003e     - **URL:** `http://localhost:8080`\n\n```bash\ntask demo\n```\n\n## Features\n\n### Project Layout\n\n- Based on [Standard Go Project Layout](https://github.com/golang-standards/project-layout).\n\n### Git\n\n- Hooks managed by [husky](https://github.com/typicode/husky):\n  - Pre-Push:\n    - Scanning Repository for secrets using [TruffleHog CLI](https://github.com/trufflesecurity/trufflehog) and [Trivy](https://github.com/aquasecurity/trivy)\n  - Pre-Commit: [lint-staged](https://github.com/lint-staged/lint-staged)\n    - Scanning files for secrets using [TruffleHog CLI](https://github.com/trufflesecurity/trufflehog?tab=readme-ov-file#8-scan-individual-files-or-directories)\n    - Formatting files using [GolangCI-Lint](https://golangci-lint.run/welcome/quick-start/#formatting) and [Prettier](https://prettier.io/docs/install).\n  - Commit-Msg: [commitlint](https://github.com/conventional-changelog/commitlint)\n    - Check [Conventional Commits](https://www.conventionalcommits.org) rules\n- Commit message helper using [czg](https://github.com/Zhengqbbb/cz-git).\n  - Interactive prompt that allows you to write commits following the [Conventional Commits](https://www.conventionalcommits.org) rules:\n    ```bash\n    task commit\n    ```\n\n### Scanners\n\n- [TruffleHog CLI](https://github.com/trufflesecurity/trufflehog): Secrets.\n- [Trivy](https://github.com/aquasecurity/trivy): Secrets, Vulnerabilities and Misconfigurations.\n- [OSV-Scanner](https://github.com/google/osv-scanner): Vulnerabilities.\n\n### Linters/Formatters\n\n- `*.go`: [GolangCI-Lint](https://github.com/golangci/golangci-lint).\n- `*.templ`: [templ fmt](https://templ.guide/developer-tools/cli#formatting-templ-files).\n- `*.feature` (Gherkin): [Cucumber extension](https://cucumber.io/docs/tools/general).\n- `*.*`: [Prettier cli/extension](https://prettier.io/docs/install).\n\n### Debuggers\n\n- `*.go`: [deadcode](https://pkg.go.dev/golang.org/x/tools/cmd/deadcode).\n\n### Tests\n\n- Random data generator: [Gofakeit](https://github.com/brianvoe/gofakeit).\n- Unit/Integration: [Testify](https://github.com/stretchr/testify).\n- Acceptance: [Testify](https://github.com/stretchr/testify), [Godog (Cucumber)](https://github.com/cucumber/godog) and [Playwright](https://github.com/playwright-community/playwright-go).\n\n### Releases\n\n- Automatically managed by [Release It!](https://github.com/release-it/release-it):\n  - Before/After Hooks for:\n    - Linting\n    - Testing\n  - Bump version based on [Conventional Commits](https://www.conventionalcommits.org) and [SemVer](https://semver.org/):\n    - CHANGELOG generator\n    - Commits and Tags generator\n    - GitHub Releases\n\n### GitHub\n\n- Actions for:\n  - Setup Languages and Dependencies ([setup](.github/actions/setup/action.yml))\n- Workflows running:\n  - Automatically (Triggered by **Push** or **Pull requests**) ([ci](.github/workflows/ci.yml)):\n    - Secrets\n    - Vulnerabilities\n    - Misconfigurations\n    - Linting\n    - Testing\n  - Manually (Using the **Actions tab** on GitHub):\n    - Upgrade Dependencies ([upgrade](.github/workflows/upgrade.yml))\n    - Automate Release ([release](.github/workflows/release.yml))\n- Issue Templates **(Defaults)**.\n\n### Devcontainer\n\n- Multiple [Features](.devcontainer/devcontainer.json) already pre-configured:\n  - Go\n  - Task\n  - Docker in Docker\n  - Light-weight Desktop (Fluxbox)\n  - SSH\n- [Extensions](.devcontainer/devcontainer.json) and their respective [settings](.vscode/settings.json) to work with:\n  - Go\n  - Task\n  - Docker\n  - templ\n  - Cucumber\n    - Gherkin\n  - YAML\n  - TOML\n  - Prettier\n  - Better Comments\n  - Comment Divider\n  - Todo Tree\n  - cSpell\n  - Fomantic Snippets\n\n### Docker\n\n- [Dockerfile](deployments/Dockerfile)\n  - **Multi-stage builds**:\n    - Development\n    - Testing\n    - Build\n    - Production\n- [Compose](deployments/docker-compose.yml)\n  - Switched by ENVs and Profiles.\n\n### Broker\n\n- Message Routing Key based on [AsyncAPI Topic Definition](https://github.com/fmvilas/topic-definition).\n\n### Server\n\n- [Progressive Web App (PWA)](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Guides/Making_PWAs_installable)\n  - [Manifest](internal/app/server/static/manifest.json)\n\n### Security\n\n- Server log files.\n- Requests **Rate Limiting**.\n- Data **authentication** via **JWT** managed by **Session Cookies**.\n- [Captcha](https://github.com/mojocn/base64Captcha) implementation in forms.\n- Form validation at the client using [Fomantic - Form Validation](https://fomantic-ui.com/behaviors/form.html).\n  - On the server, the validations are performed using the **Value Objects** defined in the **Context**.\n- Account confirmation and recovery via **Mail** or **Terminal**.\n  - Limited to a certain number of attempts in a given time interval.\n- Password hashing using [Bcrypt](https://pkg.go.dev/golang.org/x/crypto/bcrypt).\n\n### Tools\n\n- [cDeps](https://github.com/bastean/x)\n  - Copies the files required by the browser dependencies from the **node_modules** folder and places them inside the **static** folder on the server.\n- [syncENV](https://github.com/bastean/x)\n  - Synchronize all **.env\\*** files in the directory using an **.env** model.\n\n### Scripts\n\n- [run](deployments/run.sh)\n  - Display the logs and redirect them to a file whose name depends on the time at which the service was run.\n  - Used in Production Image.\n\n## Domain \u003e (Infrastructure | Application) \u003e Presentation\n\n### Bounded Context (App/Business/Department) \u003e Modules (Troubleshooting) \u003e Layers (Domain, Infrastructure \u0026 Application)\n\n- **Domain (Logic Core)**\n  - Value Objects (Entities)\n    - Mother Creators\n    - Unit Tests\n  - Messages\n    - Mother Creators\n  - Aggregates (Sets of Entities)\n    - Aggregate Root (Core Set)\n    - Mother Creators\n  - Role Interfaces (Ports)\n    - Repository\n    - Broker\n  - Model Interfaces\n    - Use Cases\n    - Handlers/Consumers\n  - Services (Abstract Logic)\n  - Errors (Management)\n- **Infrastructure (Port Adapters)**\n  - Persistence\n    - Repository Mocks\n    - Implementations (Adapters)\n    - Integration Tests\n  - Communication\n    - Broker Mocks\n    - Implementations (Adapters)\n    - Integration Tests\n- **Application (Orchestration of Domain Logic)**\n  - Use Cases\n    - Implementations\n  - Commands\n    - Mother Creators\n  - Queries/Responses\n    - Mother Creators\n  - Handlers/Consumers\n    - Implementations\n    - Unit Tests\n\n### Services \u003e App \u003e (Presentation)\n\n- **Presentation (Consumers of Bounded Context Modules)**\n  - Services (Mapping)\n    - Centralize Imports\n    - Initializations\n  - Server\n    - Templates\n    - Handlers\n      - API\n      - Views\n    - Routes\n      - API `/v*`\n      - Views\n    - Features (Gherkin)\n      - Acceptance Tests\n        - API\n        - Views\n\n## Workflow\n\n### Idea\n\nThe system allows users to register a new account, log in and update their data or permanently delete their account, as well as verify and reset their account through a link sent to their email.\n\n### Functionality\n\nIt is a monolith where CRUD operations can be performed from different presentations to the same database, this allows us to manage users from the different presentations available, in addition to having a messaging system that allows to communicate the events occurred, thus avoiding a coupling to the source of the same.\n\n### Folders\n\n1. `pkg/context/(modules)`\n   - It is the logical core that contains all the necessary functionalities that are agnostic of any **presentation**.\n\n2. `internal/pkg/service`\n   - It is responsible for initializing all **context** functionalities so that they are ready for use, as well as for **\"mapping\"** certain values to centralize all imports required for **presentations** in a single place.\n\n3. `internal/app/(presentations)`\n   - These **applications** will be used as **presentations** in order to serve the functionalities to an end user.\n\n### Idiomatic\n\n- **Domain**\n  - `errors.New*()`, `errors.BubbleUp()` \u0026 `errors.Panic()`\n    - Only in the `Domain` layer and in the `*_test.go` files can we throw `errors.Panic()`.\n- **Infrastructure**\n  - `New*()`, `Open()` \u0026 `Close()`\n    - `session`\n  - `errors.New*()` \u0026 `errors.BubbleUp()`\n- **Application**\n  - `Run()`, `Handle()` \u0026 `On()`\n  - `errors.New*()` \u0026 `errors.BubbleUp()`\n- **Presentation**\n  - **Modules**\n    - `Start()` \u0026 `Stop()`\n    - `errors.BubbleUp()`\n  - **Services / Apps**\n    - `Init()`, `Up()` \u0026 `Down()`\n      - `log.[Wrap]()`\n    - `errors.New*()` \u0026 `errors.BubbleUp()`\n      - In `Apps` we will handle `Bubble Errors`.\n- **Main**\n  - `log.Fatal()` \u0026 `log.[Wrap]()`\n    - Only `main()` can use `log.Fatal()`.\n- **Logs**\n  - `[embed]`\n    - We use `[]` to **\"embed\"** external values such as error messages, fields, etc... inside our messages.\n- **ENVs**\n  - `os.[Getenv/LookupEnv]()`\n    - Only handle `ENVs` directly in the `Presentation` layer and in the `*_test.go` files.\n      - At the `Infrastructure` layer, `ENVs` are received via arguments through function parameters.\n- **Blocks**\n  - `const`, `var`, \u0026 `type`\n    - We will group only those that are declared on a single line.\n\n### ...`v0` \u003e `dev0.1.0` \u003e `ci/dev0.1.0` \u003e `main` \u003e `v0`...\n\nCreate `v0` branch from `main`.\n\n```bash\ntask git-v0\n```\n\nCreate development branch `dev0.1.0` from `v0`.\n\n```bash\ntask git-dev0.1.0\n```\n\nCreate branch `ci/dev0.1.0` from `dev0.1.0` to ensure that the workflows run correctly with the new changes before merging them with `main`.\n\n```bash\ntask git-ci/dev0.1.0\n```\n\nOnce the workflows have been successfully passed, the new changes from `ci/dev0.1.0` will be merged into `main`.\n\n```bash\ntask git-main-ci/dev0.1.0\n```\n\nAfter releasing the new version `v0.1.0`, the `main` and `v0` branches in our local repository will be updated.\n\n```bash\ntask git-pull-v0\n```\n\nTo end the cycle, the `dev0.1.0` and `ci/dev0.1.0` branches will be deleted.\n\n```bash\ntask git-cleanup-dev0.1.0\n```\n\n## First Steps\n\n### Clone\n\n#### HTTPS\n\n```bash\ngit clone https://github.com/bastean/codexgo.git \u0026\u0026 cd codexgo\n```\n\n#### SSH\n\n```bash\ngit clone git@github.com:bastean/codexgo.git \u0026\u0026 cd codexgo\n```\n\n### Initialize\n\n#### Dev Container **(Recommended)**\n\n1. System Requirements\n   - [Docker](https://docs.docker.com/get-docker)\n     - [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)\n\n2. Start VS Code\n\n   ```bash\n   code .\n   ```\n\n3. Open Command Palette\n   - F1\n\n4. Run\n\n   ```text\n   Dev Containers: Reopen in Container\n   ```\n\n5. SSH **(Optional)**\n   - We can connect to our `Dev Container` via `SSH` in the following ways:\n     - If we have [Task](https://taskfile.dev/installation) installed on our host, being in the root of the repository\n\n       ```bash\n       task connect-2222-vscode-localhost\n       ```\n\n     - Using the SSH Client of our host\n\n       ```bash\n       ssh -p 2222 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o GlobalKnownHostsFile=/dev/null vscode@localhost\n       ```\n\n     - **Password:** `vscode`\n\n6. Desktop **(Optional)**\n   - We can connect to our `Dev Container` via `VNC` using our web browser.\n     - **URL:** `http://localhost:6080`\n     - **Password:** `vscode`\n       - No password is required to connect from the **local host**.\n     - Change the default applications of the context menu **(Optional)**\n\n       ```bash\n       task desktop\n       ```\n\n       - **File Manager:** `xfe`\n       - **Terminal:** `terminator`\n       - **Web Browser:** `chromium`\n\n#### Locally\n\n1. System Requirements\n   - [Go](https://go.dev/doc/install)\n   - [Task](https://taskfile.dev/installation)\n   - [Docker](https://docs.docker.com/get-docker)\n\n2. Run\n\n   ```bash\n   task init\n   ```\n\n### ZIP\n\n\u003e [!NOTE]\n\u003e\n\u003e - [System Requirements](#locally)\n\u003e - We need to change `\u003cuser\u003e` and `\u003crepository\u003e` with our own values.\n\n```bash\ncurl -sSfLO https://github.com/bastean/codexgo/archive/refs/heads/main.zip \\\n\u0026\u0026 unzip main.zip \\\n\u0026\u0026 mv codexgo-main \u003crepository\u003e \\\n\u0026\u0026 rm main.zip \\\n\u0026\u0026 cd \u003crepository\u003e \\\n\u0026\u0026 task genesis \\\n\u0026\u0026 git commit -m \"feat(genesis): codexgo\" \\\n\u0026\u0026 git branch -M main \\\n\u0026\u0026 git remote add github https://github.com/\u003cuser\u003e/\u003crepository\u003e.git \\\n\u0026\u0026 git push -u github main \\\n\u0026\u0026 git status\n```\n\n\u003cdetails\u003e\n\n\u003csummary\u003eRepository initialization from ZIP \u003cb\u003e(Optional)\u003c/b\u003e\u003c/summary\u003e\n\n## Design\n\n#### Icons (Template: [Icon Safe Zone SVG](https://www.w3.org/TR/appmanifest/images/icon-safe-zone.svg))\n\n- `favicon-512.png` (512x512)\n\n#### Screenshots\n\n- `desktop.png` (1536x860)\n- `mobile.png` (425x800)\n\n#### Readme\n\n- `logo.png`\n\n#### Social Preview (Template: [GitHub Repository \u003e Settings \u003e General \u003e Social preview \u003e Download template]())\n\n- `social-preview.png`\n\n#### Mocks\n\n- Wireframe\n- UML\n\n## Repository\n\n#### Genesis\n\n- Run initialization from `ZIP` ([codexGO](https://github.com/bastean/codexgo#zip))\n\n- Cleanup\n  - `CHANGELOG`\n  - Everything not required\n\n- Add `\u003crepository\u003e` \u003e `assets/`\n  - Compress `assets`\n\n- Update `#colors` \u003e `#\u003crepository\u003e`\n\n- Update (`codexgo/v*`|`codexgo`|`codexGO`) \u003e `\u003crepository\u003e`\n  - `Source Code`, `Files` \u0026 `Folders`\n\n- Update `README`\n  - Update `Logo`\n  - Update `Description`\n  - Add `Disclaimer`\n\n    ```markdown\n    \u003e [!IMPORTANT]\n    \u003e\n    \u003e `\u003crepository\u003e` is still in the early stages of development.\n    ```\n\n  - Update `Tech Stack`\n  - Remove all other sections, except:\n    - `Logo`, `Description`, `Disclaimer`, `Badges`, `Tech Stack`, `Contributing` \u0026 `License`\n  - Change `v*.*.*` \u003e `v0.0.0`\n\n- Commit, Upgrade \u0026 Push\n\n  ```bash\n  git commit -m \"chore: update codexgo to \u003crepository\u003e\" \\\n  \u0026\u0026 task upgrade \\\n  \u0026\u0026 git push \\\n  \u0026\u0026 git status\n  ```\n\n## GitHub\n\n#### Settings\n\n- Rulesets\n  - `New branch ruleset`\n    - Ruleset Name \\*\n      - Branches\n    - Enforcement status\n      - Active\n    - Target branches\n      - Include by pattern\n        - `main`\n        - `v*`\n    - Branch rules\n      - Restrict deletions\n      - Require signed commits **(Optional)**\n      - Block force pushes\n  - `New tag ruleset`\n    - Ruleset Name \\*\n      - Tags\n    - Enforcement status\n      - Active\n    - Target tags\n      - Include by pattern\n        - `v*`\n    - Tag rules\n      - Restrict deletions\n      - Require signed commits **(Optional)**\n      - Block force pushes\n\n- Secrets and variables **(Optional)**\n  - Actions\n    - New repository secret\n      - `BOT_GPG_PASSPHRASE`\n      - `BOT_GPG_PRIVATE_KEY`\n\n        ```bash\n        gpg --armor --export-secret-key [Pub_Key_ID (*-BOT)]\n        ```\n\n- Social preview\n  - Upload an image…\n\n#### Actions\n\n- Workflows\n  - Release\n    - Run workflow\n      - Use workflow from\n        - Branch: `main`\n      - Status\n        - `alpha`\n      - Bump\n        - `minor`\n    - Pre-release\n      - `v0.1.0-alpha.0`\n\n\u003c/details\u003e\n\n### GitHub Actions **(Optional)**\n\n\u003e [!IMPORTANT]\n\u003e By default, the user used to create commits and tags in workflows is `github-actions[bot]`, whose creations are not signed. If we want the creation of commits and tags to be signed, we must create the specified **\"Repository Secrets\"**, this way by selecting `GPG Sign` when manually launching a workflow everything will be created using the information obtained from the **\"GPG Key\"**.\n\n#### Settings tab\n\n##### Secrets and variables\n\n- Actions\n  - New repository secret\n    - `BOT_GPG_PASSPHRASE`\n\n    - `BOT_GPG_PRIVATE_KEY`\n\n      ```bash\n      gpg --armor --export-secret-key [Pub_Key_ID (*-BOT)]\n      ```\n\n### Run\n\n#### ENVs\n\n\u003e [!IMPORTANT]\n\u003e If we want to modify the values inside some `.env` file, here [.env.example.demo](deployments/.env.example.demo) we can see the values that can be used.\n\n#### Development ([.env.demo.dev](deployments/.env.demo.dev))\n\n\u003e [!NOTE]\n\u003e\n\u003e - `RabbitMQ`\n\u003e   - **URL:** `http://localhost:15672`\n\u003e   - **User/Password:** `codexgo-dev`\n\u003e - `MongoDB`\n\u003e   - **Compass:** `mongodb://codexgo-dev:codexgo-dev@localhost:27017`\n\u003e - `Mailpit`\n\u003e   - **URL:** `http://localhost:8025`\n\u003e - `codexGO` Server\n\u003e   - **URL:** `http://localhost:8080`\n\u003e - `codexGO` Live-Reloading Server\n\u003e   - **URL:** `http://localhost:8090`\n\n```bash\ntask compose-dev\n```\n\n#### Tests\n\n##### Unit\n\n```bash\ntask test-unit\n```\n\n```bash\ntask test-flaky\n```\n\n##### Integration ([.env.demo.test](deployments/.env.demo.test) | [.env.demo.test.integration](deployments/.env.demo.test.integration))\n\n```bash\ntask compose-test-integration\n```\n\n##### Acceptance ([.env.demo.test](deployments/.env.demo.test) | [.env.demo.test.acceptance](deployments/.env.demo.test.acceptance))\n\n```bash\ntask compose-test-acceptance\n```\n\n##### Unit / Integration / Acceptance ([.env.demo.test](deployments/.env.demo.test))\n\n```bash\ntask compose-tests\n```\n\n#### Production ([.env.demo.prod](deployments/.env.demo.prod))\n\n\u003e [!NOTE]\n\u003e\n\u003e - We must define our own **SMTP** configuration in the `CODEXGO_SMTP_*` variables, to receive the links by mail.\n\u003e   - By default, as there are no values set, the links will be sent through the terminal.\n\u003e - `RabbitMQ`\n\u003e   - **URL:** `http://localhost:15672`\n\u003e   - **User/Password:** `codexgo`\n\u003e - `MongoDB`\n\u003e   - **Compass:** `mongodb://codexgo:codexgo@localhost:27017`\n\u003e - `codexGO` Server\n\u003e   - **URL:** `http://localhost:8080`\n\n```bash\ntask compose-prod\n```\n\n## Tech Stack\n\n#### Base\n\n- [Go](https://go.dev)\n- [Gin](https://gin-gonic.com)\n- [templ](https://templ.guide)\n  - [Fomantic-UI](https://fomantic-ui.com)\n- [RabbitMQ](https://www.rabbitmq.com/tutorials/tutorial-one-go)\n- [MongoDB](https://www.mongodb.com/docs/drivers/go)\n- [BadgerDB](https://docs.hypermode.com/badger)\n\n#### Please see\n\n- [go.mod](go.mod)\n- [package.json](package.json)\n\n## Contributing\n\nContributions and Feedback are always welcome!\n\n- [Open a new issue](https://github.com/bastean/codexgo/issues/new/choose)\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbastean%2Fcodexgo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbastean%2Fcodexgo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbastean%2Fcodexgo/lists"}