{"id":50953646,"url":"https://github.com/batu3384/hexloom","last_synced_at":"2026-06-18T04:02:37.754Z","repository":{"id":346436272,"uuid":"1189965506","full_name":"batu3384/hexloom","owner":"batu3384","description":"Professional FastAPI text transformation studio for encoding, decoding, and validating structured payloads.","archived":false,"fork":false,"pushed_at":"2026-03-23T21:26:47.000Z","size":1031,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-24T19:53:40.885Z","etag":null,"topics":["api","base64","decoding","encoding","fastapi","jinja2","morse-code","python","render","text-transformation"],"latest_commit_sha":null,"homepage":"https://hexloom.onrender.com","language":"Python","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/batu3384.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-23T20:55:30.000Z","updated_at":"2026-03-23T21:26:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/batu3384/hexloom","commit_stats":null,"previous_names":["batu3384/hexloom"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/batu3384/hexloom","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/batu3384%2Fhexloom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/batu3384%2Fhexloom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/batu3384%2Fhexloom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/batu3384%2Fhexloom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/batu3384","download_url":"https://codeload.github.com/batu3384/hexloom/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/batu3384%2Fhexloom/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34475375,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-18T02:00:06.871Z","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":["api","base64","decoding","encoding","fastapi","jinja2","morse-code","python","render","text-transformation"],"created_at":"2026-06-18T04:02:36.872Z","updated_at":"2026-06-18T04:02:37.748Z","avatar_url":"https://github.com/batu3384.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hexloom\n\n[![CI](https://github.com/batu3384/hexloom/actions/workflows/ci.yml/badge.svg)](https://github.com/batu3384/hexloom/actions/workflows/ci.yml)\n[![Live App](https://img.shields.io/badge/live-hexloom.onrender.com-1f6feb?style=flat-square)](https://hexloom.onrender.com)\n[![License: MIT](https://img.shields.io/badge/license-MIT-0f172a?style=flat-square)](LICENSE)\n[![Python](https://img.shields.io/badge/python-3.11%2B-2563eb?style=flat-square)](pyproject.toml)\n\nHexloom is a FastAPI-based text transformation studio for encoding, decoding, validating, and inspecting structured payloads through a single operational interface.\n\nIt combines a browser workspace, JSON API endpoints, batch processing, built-in diagnostics, and deployment-ready packaging for teams working with Base64, Morse, Binary, Hex, JSON wrappers, and related text formats.\n\n## Live links\n\n- Live app: [https://hexloom.onrender.com](https://hexloom.onrender.com)\n- API docs: [https://hexloom.onrender.com/docs](https://hexloom.onrender.com/docs)\n- Health check: [https://hexloom.onrender.com/health/transformations](https://hexloom.onrender.com/health/transformations)\n\n![Hexloom overview](docs/assets/hexloom-overview.png)\n\n## What Hexloom provides\n\n- Eleven transformation methods exposed through one consistent interface\n- Single-item and batch workflows from the same product surface\n- FastAPI backend with OpenAPI and Swagger documentation\n- Built-in self-check endpoint for transformation reliability\n- Rich terminal request logging and tqdm-backed batch progress\n- Local static frontend assets with no Tailwind CDN dependency\n- Docker, Render, and GitHub-ready repository structure\n\n## Supported methods\n\n| Method | Purpose |\n| --- | --- |\n| `base64` | Single-layer Base64 encode and decode |\n| `base64_double` | Double-pass Base64 encode and decode |\n| `bytearray` | Byte payload templating with `exec(bytes([...]))` output |\n| `html_entities` | HTML entity encoding and decoding |\n| `math_expr` | Ordinal math-expression encoding without unsafe `eval()` decode |\n| `rot13` | ROT13 text rotation |\n| `url_encode` | URL-safe percent encoding |\n| `json_payload` | JSON payload wrapping with structured decode |\n| `morse` | International Morse code transform |\n| `hex` | Hexadecimal representation |\n| `binary` | Binary representation |\n\n## Product surface\n\n### Workspace\n\nThe main workspace is designed for quick operator workflows:\n\n- choose a method\n- switch between `Text to Format` and `Format to Text`\n- run single or batch jobs\n- inspect the active workflow and method metadata\n- copy or reuse output safely\n\n![Hexloom workspace](docs/assets/hexloom-live-workspace.png)\n\n### Diagnostics\n\nHexloom exposes `GET /health/transformations`, which runs encode, decode, and batch simulation checks across the supported methods. This makes the application useful both as an operator tool and as a deployment readiness probe.\n\n## API overview\n\n### Single transform\n\n- `POST /encode`\n- `POST /decode`\n\nRequest:\n\n```json\n{\n  \"data\": \"Hello World\",\n  \"method\": \"base64\"\n}\n```\n\nSuccess response:\n\n```json\n{\n  \"status\": \"success\",\n  \"result\": \"SGVsbG8gV29ybGQ=\",\n  \"clipboard_ready\": true\n}\n```\n\nError response:\n\n```json\n{\n  \"status\": \"error\",\n  \"result\": null,\n  \"message\": \"Expected a valid Base64 string.\",\n  \"clipboard_ready\": false\n}\n```\n\n### Batch transform\n\n- `POST /bulk/encode`\n- `POST /bulk/decode`\n\nRequest:\n\n```json\n{\n  \"method\": \"binary\",\n  \"items\": [\"01001000 01101001\", \"01001000 01100101 01111000\"]\n}\n```\n\n## Local development\n\n```bash\npython3 -m venv .venv\n.venv/bin/pip install -e '.[dev]'\n.venv/bin/uvicorn app.main:app --host 127.0.0.1 --port 8000\n```\n\nOpen:\n\n- `http://127.0.0.1:8000`\n- `http://127.0.0.1:8000/docs`\n- `http://127.0.0.1:8000/health/transformations`\n\nIf you want correct canonical and social-sharing URLs outside localhost, define:\n\n```bash\nexport HEXLOOM_PUBLIC_URL=\"https://your-domain.example\"\n```\n\n## CLI entry point\n\n```bash\n.venv/bin/hexloom\n```\n\n## Docker\n\n```bash\ndocker build -t hexloom .\ndocker run --rm -p 8000:8000 hexloom\n```\n\n## Deployment\n\n### Render\n\nThe repository includes [`render.yaml`](render.yaml), so Render can provision the service directly from GitHub.\n\n### Other platforms\n\nUse the included [`Dockerfile`](Dockerfile) for Fly.io, Google Cloud Run, or any container-based VPS deployment.\n\n## Quality checks\n\n```bash\n.venv/bin/pytest -q\npython3 -m build\npython3 -m twine check dist/hexloom-0.1.2*\n```\n\n## Tech stack\n\n- FastAPI\n- Pydantic\n- Jinja2\n- Rich\n- tqdm\n- pytest\n- httpx\n\n## Repository layout\n\n```text\n.\n├── app/\n├── docs/\n│   └── assets/\n├── static/\n├── templates/\n├── tests/\n├── CHANGELOG.md\n├── CONTRIBUTING.md\n├── Dockerfile\n├── LICENSE\n├── SECURITY.md\n├── pyproject.toml\n└── render.yaml\n```\n\n## Project hygiene\n\n- Release history: [CHANGELOG.md](CHANGELOG.md)\n- Contribution guide: [CONTRIBUTING.md](CONTRIBUTING.md)\n- Security policy: [SECURITY.md](SECURITY.md)\n- Current stable release: [`v0.1.2`](https://github.com/batu3384/hexloom/releases/tag/v0.1.2)\n\n## License\n\nHexloom is released under the [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbatu3384%2Fhexloom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbatu3384%2Fhexloom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbatu3384%2Fhexloom/lists"}