# w00j00ng/goproj architecture

> Architecture diagram of the GitHub repository w00j00ng/goproj, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/w00j00ng/goproj
- Repository: https://github.com/w00j00ng/goproj

## Overview

This repository is a collection of independent Go command-line tools, not one application. Each tool starts from its own CLI entry point and provides a separate developer workflow: password-hash generation/verification, JWT inspection/signing/verification, local listener inspection, HTTP request inspection, synthetic test-value generation, or time conversion. The graph shows sampled command wiring and documented capabilities. Some implementations—especially the password package and the smaller utilities—were not excerpted, so their internal relationships are intentionally not inferred.

Main entry points: [`bcrypter/cmd/root.go`](https://github.com/w00j00ng/goproj/blob/main/bcrypter/cmd/root.go) (Bcrypt CLI), [`scrypter/cmd/root.go`](https://github.com/w00j00ng/goproj/blob/main/scrypter/cmd/root.go) (Scrypt CLI), [`portwho/cmd/root.go`](https://github.com/w00j00ng/goproj/blob/main/portwho/cmd/root.go) (Query CLI), [`jwter/cmd/root.go`](https://github.com/w00j00ng/goproj/blob/main/jwter/cmd/root.go) (JWT commands)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_passwords["Password tools"]
  node_bcrypter_entry["Bcrypter entry<br/>[main.go]"]
  node_bcrypter_cli["Bcrypt CLI<br/>[root.go]"]
  node_bcrypter_verify["Bcrypt verification<br/>[verify.go]"]
  node_bcrypter_clipboard["Bcrypt clipboard<br/>[clipboard.go]"]
  node_bcrypter_clipboard_fallback["Clipboard fallback"]
  node_bcrypter_hash["Bcrypt hashes"]
  node_scrypter_entry["Scrypter entry<br/>[main.go]"]
  node_scrypter_cli["Scrypt CLI<br/>[root.go]"]
  node_scrypter_verify["Scrypt verification<br/>[verify.go]"]
  node_scrypter_clipboard["Scrypt clipboard<br/>[clipboard.go]"]
  node_scrypter_clipboard_fallback["Clipboard fallback"]
  node_scrypter_hash["Better Auth scrypt"]
end

subgraph group_jwt["JWT tool"]
  node_jwter_entry["JWT entry<br/>[main.go]"]
  node_jwter_cli["JWT commands<br/>[root.go]"]
  node_jwt_decode["Decode and verify<br/>[decode.go]"]
  node_jwt_encode["JWT encoding<br/>[encode.go]"]
  node_jwt_token["Token operations<br/>[token.go]"]
  node_jwt_validation["Signature and claims<br/>[verify.go]"]
  node_jwt_algorithms["Algorithm registry<br/>[algorithms.go]"]
  node_jwt_hs256["HS256<br/>[hs256.go]"]
  node_jwt_es256["ES256<br/>[es256.go]"]
end

subgraph group_portwho["Port inspection"]
  node_portwho_entry["Portwho entry<br/>[main.go]"]
  node_portwho_cli["Query CLI<br/>[root.go]"]
  node_portwho_inspect["Inspection service<br/>[service.go]"]
  node_portwho_model["Query and results<br/>[model.go]"]
  node_portwho_platform["OS collectors<br/>[provider_linux.go]"]
  node_portwho_darwin["macOS native collector<br/>[native_darwin.c]"]
  node_portwho_render["Output rendering<br/>[render.go]"]
end

subgraph group_utilities["Developer utilities"]
  node_http_inspector["HTTP inspector<br/>[main.go]"]
  node_test_values["Synthetic ID values<br/>[main.go]"]
  node_time_conversion["Time conversion<br/>[main.go]"]
end

node_developer(("Developer"))

node_developer -.->|"runs CLI"| node_bcrypter_entry
node_bcrypter_entry -->|"executes"| node_bcrypter_cli
node_developer -.->|"requests hash"| node_bcrypter_cli
node_bcrypter_cli -.->|"generates hashes"| node_bcrypter_hash
node_bcrypter_cli -.->|"dispatches verify"| node_bcrypter_verify
node_bcrypter_cli -.->|"copies optionally"| node_bcrypter_clipboard
node_bcrypter_cli -.->|"uses unsupported fallback"| node_bcrypter_clipboard_fallback
node_developer -.->|"runs CLI"| node_scrypter_entry
node_scrypter_entry -->|"executes"| node_scrypter_cli
node_developer -.->|"requests hash"| node_scrypter_cli
node_scrypter_cli -.->|"generates hashes"| node_scrypter_hash
node_scrypter_cli -->|"dispatches verify"| node_scrypter_verify
node_scrypter_cli -->|"copies optionally"| node_scrypter_clipboard
node_scrypter_cli -.->|"uses unsupported fallback"| node_scrypter_clipboard_fallback
node_developer -.->|"runs CLI"| node_jwter_entry
node_jwter_entry -->|"executes"| node_jwter_cli
node_developer -.->|"chooses command"| node_jwter_cli
node_jwter_cli -->|"dispatches decode"| node_jwt_decode
node_jwter_cli -->|"dispatches encode"| node_jwt_encode
node_jwt_decode -->|"decodes token"| node_jwt_token
node_jwt_decode -->|"verifies claims"| node_jwt_validation
node_jwt_encode -.->|"encodes token"| node_jwt_token
node_jwt_token -.->|"selects algorithm"| node_jwt_algorithms
node_jwt_algorithms -->|"registers"| node_jwt_hs256
node_jwt_algorithms -->|"registers"| node_jwt_es256
node_developer -.->|"runs CLI"| node_portwho_entry
node_portwho_entry -->|"executes"| node_portwho_cli
node_developer -.->|"queries listeners"| node_portwho_cli
node_portwho_cli -->|"creates provider"| node_portwho_platform
node_portwho_cli -->|"runs query"| node_portwho_inspect
node_portwho_cli -->|"renders result"| node_portwho_render
node_portwho_inspect -.->|"uses query model"| node_portwho_model
node_portwho_platform -.->|"platform alternative"| node_portwho_darwin
node_developer -.->|"inspects requests"| node_http_inspector
node_developer -.->|"generates test values"| node_test_values
node_developer -.->|"converts time"| node_time_conversion

click node_bcrypter_entry "https://github.com/w00j00ng/goproj/blob/main/bcrypter/main.go"
click node_bcrypter_cli "https://github.com/w00j00ng/goproj/blob/main/bcrypter/cmd/root.go"
click node_bcrypter_verify "https://github.com/w00j00ng/goproj/blob/main/bcrypter/cmd/verify.go"
click node_bcrypter_clipboard "https://github.com/w00j00ng/goproj/blob/main/bcrypter/cmd/clipboard.go"
click node_bcrypter_clipboard_fallback "https://github.com/w00j00ng/goproj/blob/main/bcrypter/cmd/clipboard_unsupported.go"
click node_scrypter_entry "https://github.com/w00j00ng/goproj/blob/main/scrypter/main.go"
click node_scrypter_cli "https://github.com/w00j00ng/goproj/blob/main/scrypter/cmd/root.go"
click node_scrypter_verify "https://github.com/w00j00ng/goproj/blob/main/scrypter/cmd/verify.go"
click node_scrypter_clipboard "https://github.com/w00j00ng/goproj/blob/main/scrypter/cmd/clipboard.go"
click node_scrypter_clipboard_fallback "https://github.com/w00j00ng/goproj/blob/main/scrypter/cmd/clipboard_unsupported.go"
click node_jwter_entry "https://github.com/w00j00ng/goproj/blob/main/jwter/main.go"
click node_jwter_cli "https://github.com/w00j00ng/goproj/blob/main/jwter/cmd/root.go"
click node_jwt_decode "https://github.com/w00j00ng/goproj/blob/main/jwter/cmd/decode.go"
click node_jwt_encode "https://github.com/w00j00ng/goproj/blob/main/jwter/cmd/encode.go"
click node_jwt_token "https://github.com/w00j00ng/goproj/blob/main/jwter/token/token.go"
click node_jwt_validation "https://github.com/w00j00ng/goproj/blob/main/jwter/token/verify.go"
click node_jwt_algorithms "https://github.com/w00j00ng/goproj/blob/main/jwter/token/algorithms.go"
click node_jwt_hs256 "https://github.com/w00j00ng/goproj/blob/main/jwter/algorithm/hs256/hs256.go"
click node_jwt_es256 "https://github.com/w00j00ng/goproj/blob/main/jwter/algorithm/es256/es256.go"
click node_portwho_entry "https://github.com/w00j00ng/goproj/blob/main/portwho/main.go"
click node_portwho_cli "https://github.com/w00j00ng/goproj/blob/main/portwho/cmd/root.go"
click node_portwho_inspect "https://github.com/w00j00ng/goproj/blob/main/portwho/internal/inspect/service.go"
click node_portwho_model "https://github.com/w00j00ng/goproj/blob/main/portwho/internal/inspect/model.go"
click node_portwho_platform "https://github.com/w00j00ng/goproj/blob/main/portwho/internal/platform/provider_linux.go"
click node_portwho_darwin "https://github.com/w00j00ng/goproj/blob/main/portwho/internal/platform/native_darwin.c"
click node_portwho_render "https://github.com/w00j00ng/goproj/blob/main/portwho/internal/render/render.go"
click node_http_inspector "https://github.com/w00j00ng/goproj/blob/main/helloworld/main.go"
click node_test_values "https://github.com/w00j00ng/goproj/blob/main/jumin/main.go"
click node_time_conversion "https://github.com/w00j00ng/goproj/blob/main/timetool/main.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_bcrypter_entry,node_bcrypter_cli,node_bcrypter_verify,node_bcrypter_clipboard,node_bcrypter_clipboard_fallback,node_bcrypter_hash,node_scrypter_entry,node_scrypter_cli,node_scrypter_verify,node_scrypter_clipboard,node_scrypter_clipboard_fallback,node_scrypter_hash toneBlue
class node_jwter_entry,node_jwter_cli,node_jwt_decode,node_jwt_encode,node_jwt_token,node_jwt_validation,node_jwt_algorithms,node_jwt_hs256,node_jwt_es256 toneAmber
class node_portwho_entry,node_portwho_cli,node_portwho_inspect,node_portwho_model,node_portwho_platform,node_portwho_darwin,node_portwho_render toneMint
class node_http_inspector,node_test_values,node_time_conversion toneRose
class node_developer toneIndigo
```

## Components

### Password tools

- [Bcrypter entry](https://github.com/w00j00ng/goproj/blob/main/bcrypter/main.go): `bcrypter/main.go`
- [Bcrypt CLI](https://github.com/w00j00ng/goproj/blob/main/bcrypter/cmd/root.go): `bcrypter/cmd/root.go`
- [Bcrypt verification](https://github.com/w00j00ng/goproj/blob/main/bcrypter/cmd/verify.go): `bcrypter/cmd/verify.go`
- [Bcrypt clipboard](https://github.com/w00j00ng/goproj/blob/main/bcrypter/cmd/clipboard.go): `bcrypter/cmd/clipboard.go`
- [Clipboard fallback](https://github.com/w00j00ng/goproj/blob/main/bcrypter/cmd/clipboard_unsupported.go): `bcrypter/cmd/clipboard_unsupported.go`
- **Bcrypt hashes**
- [Scrypter entry](https://github.com/w00j00ng/goproj/blob/main/scrypter/main.go): `scrypter/main.go`
- [Scrypt CLI](https://github.com/w00j00ng/goproj/blob/main/scrypter/cmd/root.go): `scrypter/cmd/root.go`
- [Scrypt verification](https://github.com/w00j00ng/goproj/blob/main/scrypter/cmd/verify.go): `scrypter/cmd/verify.go`
- [Scrypt clipboard](https://github.com/w00j00ng/goproj/blob/main/scrypter/cmd/clipboard.go): `scrypter/cmd/clipboard.go`
- [Clipboard fallback](https://github.com/w00j00ng/goproj/blob/main/scrypter/cmd/clipboard_unsupported.go): `scrypter/cmd/clipboard_unsupported.go`
- **Better Auth scrypt**

### JWT tool

- [JWT entry](https://github.com/w00j00ng/goproj/blob/main/jwter/main.go): `jwter/main.go`
- [JWT commands](https://github.com/w00j00ng/goproj/blob/main/jwter/cmd/root.go): `jwter/cmd/root.go`
- [Decode and verify](https://github.com/w00j00ng/goproj/blob/main/jwter/cmd/decode.go): `jwter/cmd/decode.go`
- [JWT encoding](https://github.com/w00j00ng/goproj/blob/main/jwter/cmd/encode.go): `jwter/cmd/encode.go`
- [Token operations](https://github.com/w00j00ng/goproj/blob/main/jwter/token/token.go): `jwter/token/token.go`
- [Signature and claims](https://github.com/w00j00ng/goproj/blob/main/jwter/token/verify.go): `jwter/token/verify.go`
- [Algorithm registry](https://github.com/w00j00ng/goproj/blob/main/jwter/token/algorithms.go): `jwter/token/algorithms.go`
- [HS256](https://github.com/w00j00ng/goproj/blob/main/jwter/algorithm/hs256/hs256.go): `jwter/algorithm/hs256/hs256.go`
- [ES256](https://github.com/w00j00ng/goproj/blob/main/jwter/algorithm/es256/es256.go): `jwter/algorithm/es256/es256.go`

### Port inspection

- [Portwho entry](https://github.com/w00j00ng/goproj/blob/main/portwho/main.go): `portwho/main.go`
- [Query CLI](https://github.com/w00j00ng/goproj/blob/main/portwho/cmd/root.go): `portwho/cmd/root.go`
- [Inspection service](https://github.com/w00j00ng/goproj/blob/main/portwho/internal/inspect/service.go): `portwho/internal/inspect/service.go`
- [Query and results](https://github.com/w00j00ng/goproj/blob/main/portwho/internal/inspect/model.go): `portwho/internal/inspect/model.go`
- [OS collectors](https://github.com/w00j00ng/goproj/blob/main/portwho/internal/platform/provider_linux.go): `portwho/internal/platform/provider_linux.go`
- [macOS native collector](https://github.com/w00j00ng/goproj/blob/main/portwho/internal/platform/native_darwin.c): `portwho/internal/platform/native_darwin.c`
- [Output rendering](https://github.com/w00j00ng/goproj/blob/main/portwho/internal/render/render.go): `portwho/internal/render/render.go`

### Developer utilities

- [HTTP inspector](https://github.com/w00j00ng/goproj/blob/main/helloworld/main.go): `helloworld/main.go`
- [Synthetic ID values](https://github.com/w00j00ng/goproj/blob/main/jumin/main.go): `jumin/main.go`
- [Time conversion](https://github.com/w00j00ng/goproj/blob/main/timetool/main.go): `timetool/main.go`

### Other components

- **Developer**

## Connections

- Developer → Bcrypter entry: runs CLI
- Bcrypter entry → Bcrypt CLI: executes (evidence: `bcrypter/main.go`)
- Developer → Bcrypt CLI: requests hash
- Bcrypt CLI → Bcrypt hashes: generates hashes
- Bcrypt CLI → Bcrypt verification: dispatches verify
- Bcrypt CLI → Bcrypt clipboard: copies optionally
- Bcrypt CLI → Clipboard fallback: uses unsupported fallback
- Developer → Scrypter entry: runs CLI
- Scrypter entry → Scrypt CLI: executes (evidence: `scrypter/main.go`)
- Developer → Scrypt CLI: requests hash
- Scrypt CLI → Better Auth scrypt: generates hashes (evidence: `scrypter/cmd/root.go`)
- Scrypt CLI → Scrypt verification: dispatches verify (evidence: `scrypter/cmd/root.go`)
- Scrypt CLI → Scrypt clipboard: copies optionally (evidence: `scrypter/cmd/root.go`)
- Scrypt CLI → Clipboard fallback: uses unsupported fallback
- Developer → JWT entry: runs CLI
- JWT entry → JWT commands: executes (evidence: `jwter/main.go`)
- Developer → JWT commands: chooses command
- JWT commands → Decode and verify: dispatches decode (evidence: `jwter/cmd/root.go`)
- JWT commands → JWT encoding: dispatches encode (evidence: `jwter/cmd/root.go`)
- Decode and verify → Token operations: decodes token (evidence: `jwter/cmd/decode.go`)
- Decode and verify → Signature and claims: verifies claims (evidence: `jwter/cmd/decode.go`)
- JWT encoding → Token operations: encodes token (evidence: `jwter/cmd/encode.go`)
- Token operations → Algorithm registry: selects algorithm (evidence: `jwter/token/algorithms.go`)
- Algorithm registry → HS256: registers (evidence: `jwter/token/algorithms.go`)
- Algorithm registry → ES256: registers (evidence: `jwter/token/algorithms.go`)
- Developer → Portwho entry: runs CLI
- Portwho entry → Query CLI: executes (evidence: `portwho/main.go`)
- Developer → Query CLI: queries listeners
- Query CLI → OS collectors: creates provider (evidence: `portwho/cmd/root.go`)
- Query CLI → Inspection service: runs query (evidence: `portwho/cmd/root.go`)
- Query CLI → Output rendering: renders result (evidence: `portwho/cmd/root.go`)
- Inspection service → Query and results: uses query model (evidence: `portwho/internal/inspect/service.go`)
- OS collectors → macOS native collector: platform alternative
- Developer → HTTP inspector: inspects requests
- Developer → Synthetic ID values: generates test values
- Developer → Time conversion: converts time
