Crafty

written in Haskell, HTML, CSS and JS

Crafty is a tool / framework for calculating costs of items.
It is split into a server and client / UI. The server can parse files such as:

- name: small water catcher
  costs:
  - name: wood
    count: 100
  - name: metal fragments
    count: 50
  - name: tarp
- name: metal barricade
  costs:
  - name: metal fragments
    count: 200
  - name: metal blade
    count: 2
- name: tool cupboard
  costs:
  - name: wood
    count: 1000
- name: armored double door
  costs:
  - name: high quality metal
    count: 30
  - name: gears
    count: 5
  ...

and be queried for:

  • Available items
  • Items which can be crafted with certain materials
  • Material costs of given items
  • Required tools to craft certain items

When querying the costs of certain items it is possible to define a depth. This depth defines whether either the direct costs, costs of costs, etc. are returned.
The client is currently implemented as a Html website. It displays all available languages (different crafting systems), their available items and offers ways to easily define the available or wanted items as well as display the costs or craftable items.

Crafty makes it possible to create a calculation or recipe calculator for any game, cooking or similar by defining a cost file as seen above.

Current UI (Example with the game Rust)

The main page showing available languages:
Home Page

After selecting Rust, Crafty displays its available items, which can be selected by clicking one of the amounts, + or entering the wanted quantity:
Rust Items

After selecting an item, itself, its costs and items craftable with it will be shown:
Rust Selected

With depth set to one, items directly required for crafting are listed:
Rust Depth

By increasing the depth, it is possible to also list the items which are used to craft required items (This allows quickly seeing the base costs):
Rust Increased Depth

Selecting base materials will show the items which can be crafted with the selected amount:
Rust Craftable

Available items can be filtered:
Rust Filter