Git Product home page Git Product logo

1clickbom's Introduction

Build and deploy workflow status badge Backers on Open Collective Sponsors on Open Collective

Watch a 5 minute lightning-talk about Kitspace from the 35th Chaos Communication Congress (35C3).

video

Kitspace (formerly Kitnic) is a registry of open source hardware electronics projects that are ready to order and build. It could be described as a "Thingiverse for electronics". The most important elements of a Kit Space project page are what allow a design to be manufactured:

  • A preview of the printed circuit board and prominent link to download the Gerber manufacturing files
  • The ability to quickly add the required components to a distributor shopping cart (using our browser extension)

Help us build an open hardware repository of useful electronics projects!

Get in touch

How many people visit the site?

Our visitor stats are public on plausible.io.

Tracespace

The renderings of the PCB files are made using Tracespace tools. You can get similar renderings and also inspect invdividual layers, using the Tracespace Gerber viewer.

Adding your project

kitspace.yaml format

Currently the kitspace.yaml makes use of the following fields:

summary: A description for your project

site: https://example.com # A site you would like to link to (include http:// or https://)

color: purple # for example
   # The solder resist color of the preview rendering. If left undefined "green" is used. Can be one of:
       # - green
       # - red
       # - blue
       # - black
       # - white
       # - orange
       # - purple
       # - yellow

bom: my-bom.xlsx
  # A path to your 1-click-bom in case it isn't `1-click-bom.tsv`. Supported extensions are:
  # - .tsv
  # - .csv
  # - .ods
  # - .xlsx
  # Check out https://github.com/kitspace/1clickBOM#readme for more details


gerbers: my/gerber/folder # A path to your folder of gerbers in case it isn't `gerbers/`.

eda:
  type: kicad # or eagle
  pcb: path/to/your/file.kicad_pcb # your/eagle.brd

readme: my/special/readme.md # A path to your README file in case it isn't in the repository root directory.

multi: # Identifier field only used if the repository contains multiple projects. See below for details.

Paths should be in UNIX style (i.e. use / not \) and relative to the root of your repository. The YAML format is pretty straight forward but if you need to know more check the example below and the YAML website. Use this YAML validator to be extra sure that your kitspace.yaml is valid.

KiCad PCB

If you you used KiCad for your design you can also specify a KiCad PCB file to use by adding an eda field.

eda:
  type: kicad
  pcb: path/to/your/file.kicad_pcb

If your project has a KiCad PCB file, and interactive assembly guide for the board will be created using the Interactive HTML BOM plugin from the Open Scope Project.

If both eda and gerbers are present the Gerber files will be used.

Some examples

Check out the repo links of the projects listed on kitspace.org already. The minimum required file tree is something like :

.
├── 1-click-bom.tsv
└── gerbers
    ├── example.cmp
    ├── example.drd
    ├── example.dri
    ├── example.gko
    ├── example.gpi
    ├── example.gto
    ├── example.plc
    ├── example.sol
    ├── example.stc
    └── example.sts

A more advanced example could be something like:

.
├── kitspace.yaml
└── manufacture
    ├── advanced-example-BOM.tsv
    └── gerbers-and-drills
        ├── advanced-example-B_Adhes.gba
        ├── advanced-example-B_CrtYd.gbr
        ├── advanced-example-B_Cu.gbl
        ├── advanced-example-B_Fab.gbr
        ├── advanced-example-B_Mask.gbs
        ├── advanced-example-B_Paste.gbp
        ├── advanced-example-B_SilkS.gbo
        ├── advanced-example.drl
        ├── advanced-example-Edge_Cuts.gbr
        ├── advanced-example-F_Adhes.gta
        ├── advanced-example-F_CrtYd.gbr
        ├── advanced-example-F_Cu.gtl
        ├── advanced-example-F_Fab.gbr
        ├── advanced-example-F_Mask.gts
        ├── advanced-example-F_Paste.gtp
        └── advanced-example-F_SilkS.gto

with kitspace.yaml containing:

summary: A more advanced example
site: https://example.com
color: red
bom: manufacture/advanced-example-BOM.tsv
gerbers: manufacture/gerbers-and-drills

The multi field

Kitspace supports multiple projects in one repository with the multi field. When multiple projects exist, multi will always be the first field in the kitspace.yaml, with the paths to your projects folder nested underneath.

├── kitspace.yaml
├── project_one
│   ├── 1-click-bom.tsv
│   ├── README.md
│   └── gerbers
│       ├── example.cmp
│       ├── example.drd
│       ├── example.dri
│        ...
│       ├── example.stc
│       └── example.sts
└── project_two
    ├── 1-click-bom.tsv
    ├── README.md
    └── gerbers
        ├── example.cmp
        ├── example.drd
        ├── example.dri
         ...
        ├── example.stc
        └── example.sts

with kitspace.yaml containing:

multi:
    project_one:
        summary: First project in a repository.
        color: blue
        site: https://example-one.com
    project_two:
        summary: Second project in a repository.
        color: red
        site: https://example-two.com

If you want to use custom paths for the readme, bom, or gerbers then note that these are from the root of the repository.

E.g.

├── kitspace.yaml
├── manufacturing_outputs
│   └── project_one_gerbers
│       ├── example.cmp
│       ├── example.drd
│       ├── example.dri
│        ...
│       ├── example.stc
│       └── example.sts
├── project_one
│   ├── documentation
│   │   └── README.md
    └── BOM.csv
└── project_two
    ...
multi:
    project_one:
        readme: project_one/documentation/README.md
        bom: project_one/BOM.csv
        gerbers: manufacturing_outputs/project_one_gerbers
    project_two:
      ...

Terms and Conditions for Adding a Project

  1. We (Kitspace developers) do not claim any ownership over your work, it remains yours.
  2. By submitting your project you give us permission to host copies of your files for other people to download.
  3. If you change your mind, you can remove your project any time by removing the public git repository, sending a pull-request to remove it from boards.txt or notifying @kasbah in some other way.

Development

Architecture

This repository is the Kitspace front-end. The contents including all project data are currently pre-compiled into a static site. The main part of the site that requires server side components is the submission preview (/submit). Pages also use freegeoip lookup to decide what sites to link to for people that do not have the 1-click BOM browser extension. This roughly illustrates the main data flow when someone is browsing the site.

We have two services running for the submission preview.

And one for the geo ip lookup on pages.

Requirements

  • Nodejs version 10 or higher
  • fswatch on OSX/Windows or inotify-tools on Linux
  • Ninja Build >= 1.5.1
  • Inkscape (v0.92) for converting SVGs to PNGs
  • Yarn to ensure the correct dependencies are installed
  • The rest of the dependencies can be retrieved via yarn install

Quick start for Debian/Ubuntu

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update && sudo apt install git nodejs inotify-tools ninja-build inkscape yarn
git clone https://github.com/kitspace/kitspace && cd kitspace
yarn install

Running a local dev server

Get requirements above then:

yarn install    # retrieves dependencies
yarn get-boards # gets the test projects and puts them into boards/
yarn build      # generates a build.ninja file using the ./configure script
# and calls ninja to execute the build.ninja file which builds everything (similar to how make executes a makefile)
yarn serve      # starts a development server to preview the site

Visit http://127.0.0.1:8080 in your browser to see your local development site.

Code of Conduct

We are committed to making working on Kitspace an inclusive and welcoming environment. All contributors are expected to abide by our code of conduct. It's just common sense.

Contributors

This project exists thanks to all the people who contribute.

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

1clickbom's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

1clickbom's Issues

Manufacturer field

Split out from #2

  • 'Manufacturer' field is sort of supported now as well. It was it's own column originally but is currently parsed and added in front of the part number. This was done to allow multiple manufacturers and manufacturer part numbers per line like in this Arduino Uno BOM. Recently I have been considering the convention to separate the manufacturer and manufacturer part with a : like so:
References Qty Description Part Number Part Number
C9, C11 2 22pF capacitor ceramic Johanson: 500R14N220JV4T Multicomp: MC0603N220J500CT

The alternative I am currently considering is putting the manufacturer field back:

References Qty Description Manufacturer MPN Manufacturer MPN
C9, C11 2 22pF capacitor ceramic Johanson 500R14N220JV4T Multicomp MC0603N220J500CT

Check retailer product pages for MPN

  • For a given SKU check the retailer product page to get the MPN.
  • Perform a check that all the MPNs on a line match or are specified separately

Chrome plugin emptied all baskets

I was about to finalize an afternoon of selecting parts and placing them in the baskets across 4 different webshops.
I only had to add basic resistors and used the plugin. When I was trying to copypaste the data in the right format, I tried to clear the data I pasted in the plugin. Instead, THE PLUGIN WENT TO ERASE ALL MY BASKETS ON EVERY SITE I WAS LOGGED INTO.

No warning or confirmation whatsoever. Everything gone in an instant.

Update the 1-click BOM website

https://1clickbom.com is pretty bare-bones. Could use some sprucing up. It may also be less confusing if 1clickbom.com redirects to kitspace.org/1clickbom and the page was served there.

I think what we need for this:

  • A simple site generated from the first paragraph of the README.md, link to the GitHub repo
  • Space for the Kitspace titlebar at the top (but leave it out for now).
  • Javascript to allow people to pause the GIF/Video.
  • (optional) Javascript to detect the user's OS and change the GIF/Video accordingly.

Single Capacitor Auto Completed to Capacitor Array

Hello!

I have a capacitor in my BOM which is described as 0.1uF 0805 X5R. When I auto complete it, on DigiKey I seem to get this [1] which is the correct size and type, except it's a capacitor array not a single cap (pretty strange part actually!). Everything else seems to be matching correctly.

Is there anything I can do to encourage it to do the right thing?

The revision of the BOM in question is here: https://github.com/borgel/sympetrum-v2/blob/ks/update-bom-tsv/Hardware/FF1.1/BOM/ff1.1-bom.tsv

[1] http://www.digikey.com/scripts/DkSearch/dksus.dll?Detail&itemSeq=240865863&uq=636434004340247418

Does this still work?

I've tried using in on Chrome and Firefox. When I click paste, a text box with contents 'war' appears over the toolbar icon. I assume this is a clipped warning. It would be great if I could read the warning. Short of that, is this project still supported or even working? It looks like it would be great if it did.

Use the "value" column when available, instead of "description"

In Eagle, it seems that the "description" column actually contains uneditable and less useful information like "CAPACITOR, European symbol" (see below screenshot).

On the other hand, the "value" column has more useful information that 1clickbom expects to be in description. Also, the "value" column can be edited very easily. Also, "value" is the changeable column when using the "assembly variant" feature, and it's nice that each assembly can be saved in the schematic files. So someone working on a board could create multiple variants, perhaps some with CPL identifiers, etc.

screen shot 2018-11-03 at 11 09 58 pm

Thoughts on using the "value" field instead of description when it is present? Just to streamline the instructions and remove an "open and edit" step :)

Add support for octopart BOM tool (like a cart)

Octopart seems to have a really rad BOM builder. I like the idea of your open source one more, but in the meantime, would be great to send items to a BOM much like a specific site's cart.

Parts are not added to the basket

I have checked on few computers, with firefox and on chrome, and it seams that parts are not longer added to the basket.
Firefox does not even open for example Mouser, and Chrome is opening but it shows empty basket.

On my computer it ends with loading - I did check other projects and I have same issue.

loading

Ninja reports error message (but everything builds and chrome seems to function)

Hi,

Build successful and tests pass. But there was a weird error message.
Reporting this, in case you haven't seen this yourself. // or it's a platform thing.

"depfile has multiple output paths"

uname -a
15.4.0 Darwin Kernel Version 15.4.0: Fri Feb 26 22:08:05 PST 2016; root:xnu-3248.40.184~3/RELEASE_X86_64 x86_64
OSX: 10.11.4 (15E65)

Ninja 1.6.0

[email protected]

CLI History:

darius:1clickBOM jdar$ npm install
darius:1clickBOM jdar$ export PATH=$PATH:$(pwd)/node_modules/.bin
darius:1clickBOM jdar$ ./configure.coffee
generated build.ninja
darius:1clickBOM jdar$ ninja
[7/7] browserify --require='./build/.t...1.11.0.js' -o build/chrome/js/qunit.js
FAILED: echo -n 'build/chrome/js/qunit.js: ' > build/chrome/js/qunit.js.d && browserify -x --debug --extension=".coffee" --transform coffeeify --require='./build/.temp-chrome/qunit-1.11.0.js' --list | sed 's!/Users/jdar/src/1clickBOM/!!' | tr '\n' ' ' >> build/chrome/js/qunit.js.d && browserify -x --debug --extension=".coffee" --transform coffeeify --require='./build/.temp-chrome/qunit-1.11.0.js' -o build/chrome/js/qunit.js
[7/7] browserify build/.temp-chrome/op...s.coffee -o build/chrome/js/options.js
FAILED: echo -n 'build/chrome/js/options.js: ' > build/chrome/js/options.js.d && browserify -x --debug --extension=".coffee" --transform coffeeify build/.temp-chrome/options.coffee --list | sed 's!/Users/jdar/src/1clickBOM/!!' | tr '\n' ' ' >> build/chrome/js/options.js.d && browserify -x --debug --extension=".coffee" --transform coffeeify build/.temp-chrome/options.coffee -o build/chrome/js/options.js
[7/7] browserify build/.temp-chrome/popup.coffee -o build/chrome/js/popup.js
FAILED: echo -n 'build/chrome/js/popup.js: ' > build/chrome/js/popup.js.d && browserify -x --debug --extension=".coffee" --transform coffeeify build/.temp-chrome/popup.coffee --list | sed 's!/Users/jdar/src/1clickBOM/!!' | tr '\n' ' ' >> build/chrome/js/popup.js.d && browserify -x --debug --extension=".coffee" --transform coffeeify build/.temp-chrome/popup.coffee -o build/chrome/js/popup.js
[7/7] browserify build/.temp-firefox/p....coffee -o build/firefox/data/popup.js
FAILED: echo -n 'build/firefox/data/popup.js: ' > build/firefox/data/popup.js.d && browserify -x --debug --extension=".coffee" --transform coffeeify build/.temp-firefox/popup.coffee --list | sed 's!/Users/jdar/src/1clickBOM/!!' | tr '\n' ' ' >> build/firefox/data/popup.js.d && browserify -x --debug --extension=".coffee" --transform coffeeify build/.temp-firefox/popup.coffee -o build/firefox/data/popup.js
[7/7] browserify build/.temp-chrome/unit.coffee -o build/chrome/js/unit.js
FAILED: echo -n 'build/chrome/js/unit.js: ' > build/chrome/js/unit.js.d && browserify -x build/.temp-chrome/qunit-1.11.0.js --debug --extension=".coffee" --transform coffeeify build/.temp-chrome/unit.coffee --list | sed 's!/Users/jdar/src/1clickBOM/!!' | tr '\n' ' ' >> build/chrome/js/unit.js.d && browserify -x build/.temp-chrome/qunit-1.11.0.js --debug --extension=".coffee" --transform coffeeify build/.temp-chrome/unit.coffee -o build/chrome/js/unit.js
[7/7] browserify build/.temp-chrome/fu...offee -o build/chrome/js/functional.js
FAILED: echo -n 'build/chrome/js/functional.js: ' > build/chrome/js/functional.js.d && browserify -x build/.temp-chrome/qunit-1.11.0.js --debug --extension=".coffee" --transform coffeeify build/.temp-chrome/functional.coffee --list | sed 's!/Users/jdar/src/1clickBOM/!!' | tr '\n' ' ' >> build/chrome/js/functional.js.d && browserify -x build/.temp-chrome/qunit-1.11.0.js --debug --extension=".coffee" --transform coffeeify build/.temp-chrome/functional.coffee -o build/chrome/js/functional.js
[7/7] browserify build/.temp-chrome/main.coffee -o build/chrome/js/main.js
FAILED: echo -n 'build/chrome/js/main.js: ' > build/chrome/js/main.js.d && browserify -x --debug --extension=".coffee" --transform coffeeify build/.temp-chrome/main.coffee --list | sed 's!/Users/jdar/src/1clickBOM/!!' | tr '\n' ' ' >> build/chrome/js/main.js.d && browserify -x --debug --extension=".coffee" --transform coffeeify build/.temp-chrome/main.coffee -o build/chrome/js/main.js
depfile has multiple output paths
ninja: build stopped: subcommand failed.

Mouser and LCSC bugs for ULX3S

HI

For our project ULX3S
https://kitspace.org/boards/github.com/emard/ulx3s/

mouser doesn't exactly recognize part
Mouser: 700-MAX11125ATI+
and reports this (mouser actual PN is really ending with "+" if that is making problems here?)
More Than 1 Match Found for 700MAX11125ATI Select from a list of matching products

LCSC is very unreliable, I have to retry cca 10 times to get 48 parts added and 1 part
not added, but it's difficult to find which one and what is the problem about it.

decimals autocomplete

I'm testing the software with autocomplete. I can make it work for 1K or 10K resistors, but not for values with a decimal. I tried entering 1.5K, 1,5k and 1K5. Can't get it to work. How is this supposed to go?

Add extra supported fields

Suggestions for fields to add, some more/less important than others;

  • 'Value' - its common for BOMs to have the value (e.g. 10k for a resistor) in a separate field.
  • 'Supplier' & 'Supplier Part' - at our company we just have one 'supplier' field which may say e.g. Farnell, then the 'Supplier Part' contains the Farnell code.
  • 'Fit Part' / 'Part Fitted' / 'DNF' - a bit more complex as theres probably no one standard but again at work we have a separate field in our BOM to denote whether the part is fitted. If blank it is, if marked 'DNF' then Do Not Fit. Another convention is just 'NF' or No Fit, similarly my last company used 'OC' or 'O/C' for Open Circuit. People may also put this in the Value field instead of having a separate field. Until recently our company used '1k; DNF' for a not-fitted 1k resistor.
  • 'Manufacturer' - sometimes you want a specific manufacturer for a part e.g. the 1N4148 diode is made by lots & lots of manufacturers, but the one by NXP may be the one tested to work.

error with ulx3s project

HI

trying to generate 1-click BOM I got this error.
I pulled latest from git

Run command:
python "/home/guest/src/downloaded/1clickBOM/output_scripts/kicad/1-click-bom_fields.py" "/mt/scratch/tmp/fpga/circuits/ulx3s/ulx3s.xml" "/mt/scratch/tmp/fpga/circuits/ulx3s/ulx3s"

Command error. Return code -1
Error messages:
execvp(python, /home/guest/src/downloaded/1clickBOM/output_scripts/kicad/1-click-bom_fields.py, /mt/scratch/tmp/fpga/circuits/ulx3s/ulx3s.xml, /mt/scratch/tmp/fpga/circuits/ulx3s/ulx3s) failed with error 2!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.