{"id":44293831,"url":"https://github.com/mattiasthalen/hook-forge","last_synced_at":"2026-02-11T00:10:10.226Z","repository":{"id":293907124,"uuid":"985244539","full_name":"mattiasthalen/hook-forge","owner":"mattiasthalen","description":"Hook Forge is a CLI tool for forging frames and bridges according to the data modeling methodologies Hook \u0026 Unified Star Schema","archived":false,"fork":false,"pushed_at":"2025-06-02T19:29:38.000Z","size":139,"stargazers_count":1,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-02T19:54:20.210Z","etag":null,"topics":["data-modelling","hook","qlik","sql","unified-star-schema"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mattiasthalen.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":"2025-05-17T11:08:30.000Z","updated_at":"2025-06-02T19:29:33.000Z","dependencies_parsed_at":"2025-05-24T22:55:05.443Z","dependency_job_id":null,"html_url":"https://github.com/mattiasthalen/hook-forge","commit_stats":null,"previous_names":["mattiasthalen/hook-forge"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/mattiasthalen/hook-forge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattiasthalen%2Fhook-forge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattiasthalen%2Fhook-forge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattiasthalen%2Fhook-forge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattiasthalen%2Fhook-forge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mattiasthalen","download_url":"https://codeload.github.com/mattiasthalen/hook-forge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattiasthalen%2Fhook-forge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29322781,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-10T20:44:44.282Z","status":"ssl_error","status_checked_at":"2026-02-10T20:44:43.393Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["data-modelling","hook","qlik","sql","unified-star-schema"],"created_at":"2026-02-11T00:10:10.027Z","updated_at":"2026-02-11T00:10:10.175Z","avatar_url":"https://github.com/mattiasthalen.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hook Smith\n\n*Forging HOOK data warehouse structures with precision*\n\n[![License](https://img.shields.io/badge/License-GPL%203.0-blue.svg)](LICENSE)\n[![Clojure](https://img.shields.io/badge/Clojure-Babashka-green.svg)](https://babashka.org/)\n\n## Overview\n\nHook Smith is a command-line tool for implementing the HOOK data warehousing methodology in SQL or Qlik environments. It automates the creation of frames, hooks, and Puppini bridges for Universal Star Schema (USS) implementations.\n\nThe HOOK methodology focuses on simplicity, avoiding complex transformations in favor of organizing data through business concepts and hooks. This tool helps you implement HOOK principles without manual coding.\n\n### Key Features\n\n- 📝 **Blueprint generation**: Create a template YAML configuration files for your data warehouse.\n- ⚒️ **Frame forging**: Generate a *Hook* script based on your blueprints.\n- 🌉 **Bridge building**: Generate a *Unified Star Schema* script based on your blueprints.\n- 📔 **Journal creation**: Generate documentation and visualizations of your data structure.\n\n## Prerequisites\n\n- [Babashka](https://github.com/babashka/babashka#installation)\n\n## Usage\n```bash\n# Start by creating a blueprint YAML configuration:\nbb hook blueprint\n\n# Generate frame scripts based on your blueprint:\nbb hook forge\n\n# Generate a Unified Star Schema:\nbb hook uss\n\n# Generate markdown documentation of your data structure:\nbb hook journal\n```\n\n## Blueprint Structure\n\n### concept.yaml\n```yaml\n- name: product\n  type: core\n\n- name: customer\n  type: core\n\n- name: order\n  type: core\n```\n\n### keysets.yaml\n```yaml\n- name: source.product.id\n  concept: product\n  qualifier: id\n  source_system: source\n\n- name: source.product.name\n  concept: product\n  qualifier: name\n  source_system: source\n\n- name: source.customer.id\n  concept: customer\n  qualifier: id\n  source_system: source\n\n- name: source.customer.name\n  concept: customer\n  qualifier: name\n  source_system: source\n\n- name: source.order.id\n  concept: order\n  qualifier: id\n  source_system: source\n\n- name: source.order.order_number\n  concept: order\n  qualifier: order_number\n  source_system: source\n```\n\n### frames.yaml\n```yaml\n- name: source__products\n  source_system: source\n  source_table: lib://adss/das/source/raw__source__products.qvd\n  target_table: lib://adss/dab/source/frame__source__products.qvd\n  hooks:\n  - name: hook__product__id\n    primary: true\n    concept: product\n    qualifier: id\n    keyset: source.product.id\n    business_key_field: id\n\n  - name: hook__product__name\n    primary: false\n    concept: product\n    qualifier: name\n    keyset: source.product.name\n    business_key_field: name\n\n- name: source__customers\n  source_system: source\n  source_table: lib://adss/das/source/raw__source__customers.qvd\n  target_table: lib://adss/dab/source/frame__source__customers.qvd\n  hooks:\n  - name: hook__customer__id\n    primary: true\n    concept: customer\n    qualifier: id\n    keyset: source.customer.id\n    business_key_field: id\n\n  - name: hook__customer__name\n    primary: false\n    concept: customer\n    qualifier: name\n    keyset: source.customer.name\n    business_key_field: name\n\n- name: source__orders\n  source_system: source\n  source_table: lib://adss/das/source/raw__source__orders.qvd\n  target_table: lib://adss/dab/source/frame__source__orders.qvd\n  hooks:\n  - name: hook__order__id\n    primary: true\n    concept: order\n    qualifier: id\n    keyset: source.order.id\n    business_key_field: id\n\n  - name: hook__order__order_number\n    primary: false\n    concept: order\n    qualifier: order_number\n    keyset: source.order.order_number\n    business_key_field: order_number\n\n  - name: hook__customer__id\n    primary: false\n    concept: customer\n    qualifier: id\n    keyset: source.customer.id\n    business_key_field: customer_id\n\n- name: source__order_lines\n  source_system: source\n  source_table: lib://adss/das/source/raw__source__order_lines.qvd\n  target_table: lib://adss/dab/source/frame__source__order_lines.qvd\n  hooks:\n  - name: hook__order__id\n    primary: false\n    concept: order\n    qualifier: id\n    keyset: source.order.id\n    business_key_field: order_id\n\n  - name: hook__product__id\n    primary: false\n    concept: product\n    qualifier: id\n    keyset: source.product.id\n    business_key_field: product_id\n\n  composite_hooks:\n  - name: hook__order__product__id\n    primary: true\n    hooks:\n    - hook__order__id\n    - hook__product__id\n```\n\n## unified-star-schema.yaml\n```yaml\nbridge_path: lib://adss/dar/_bridge.qvd\nperipherals:\n- name: source__products\n  source_table: lib://adss/dab/source/frame__source__products.qvd\n  target_table: lib://adss/dar/source__products.qvd\n  valid_from: Record Valid From\n  valid_to: Record Valid To\n\n- name: source__customers\n  source_table: lib://adss/dab/source/frame__source__customers.qvd\n  target_table: lib://adss/dar/source__customers.qvd\n  valid_from: Record Valid From\n  valid_to: Record Valid To\n\n- name: source__orders\n  source_table: lib://adss/dab/source/frame__source__orders.qvd\n  target_table: lib://adss/dar/source__orders.qvd\n  valid_from: Record Valid From\n  valid_to: Record Valid To\n  events:\n  - name: Order Placed On\n  - name: Order Due On\n  - name: Order Delivered On\n    field: order_delivered_on\n\n- name: source__order_lines\n  source_table: lib://adss/dab/source/frame__source__order_lines.qvd\n  target_table: lib://adss/dar/source__order_lines.qvd\n  valid_from: Record Valid From\n  valid_to: Record Valid To\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattiasthalen%2Fhook-forge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmattiasthalen%2Fhook-forge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattiasthalen%2Fhook-forge/lists"}