# Submitting your Project

Nice job on finishing your BLARE clock! This page will cover everything you need to submit your project.

Shipping your project is the process of adding in all the final changes to make your project exist in the real world! This includes:

- Going through a pre-flight checklist to watch for common mistakes
- Structuring/organizing your project, so that others can understand it
- Creating production files, so that you can actually produce your PCB
- Creating a new GitHub Repository, so that you can share your files with other people!
- Adding a README.md file, so that other people know what your project does!

If you want to learn more about what makes for a good shipped project, I'd highly recommend reading [this](https://hwdocs.hackclub.dev/shipping/), it explains our thought process when reviewing your project!

## Preflight checklist!

Before you get anywhere with submitting, make sure your project is good to go!

Here are some important things to catch:

Make sure you have tolerances where any 3D printed parts meet to make sure your PCB will fit! This is because plastic expands and shrinks as it's being 3D printed, which means your case won't 100% match your CAD exactly. I recommend leaving at least 0.2mm between any two parts that may touch.

Make sure your PCB has no errors! You should be running `DRC` in KiCad, and you should see **0 errors**. If you have any, your PCB will not work!

![DRC](Images/DRC.webp)

It's OK to have some warnings, especially about the silkscreen! If you're unsure, ask in [#blare](https://hackclub.enterprise.slack.com/archives/C0BC47NPFT9)

Lastly, make sure all your files are committed on GitHub! If you made any changes, sometimes you might've forgotten to commit. Check the last commit date!

![recent-commit](Images/recent-commit.webp)

This should be recent!

## Structuring your project design files

To make reviewing easier, we need to make sure that the source files of our project are formatted in a way that's complete & easy to navigate.
1.  Make sure you have everything necessary:

Before we organize anything, make sure you have all the files!

- A complete CAD model of the assembled case in `.STEP` format
    - This should include the PCB and all parts of the case
- Your PCB design files!
- Your firmware. 

And also meet the submission requirements.
2. Organize your folders

The above is a LOT of files! To make organization easy, you should create a folder for each part of your clock:

- `CAD`: This should contain a single file containing your ENTIRE clock. This should be a `.STEP` file.

- `PCB`: This should contain your PCB Design files. This includes the `.kicad_pro`, `.kicad_sch`, and `.kicad_pcb` file if you're using **KiCad**!

- `Firmware`: This should contain the source files for your firmware. `.ino` if you made it in Arduino IDE, but this can be whatever.

In total, you should have 3 folders in your project folder.

## Creating production files

Nice job on organizing your design files! Next, we need to create the manufacturing files that will actually be used to build your project.

This is separate from the source files, which are usually a reference to check out & iterate on your design.

**Before moving on**, create a folder called `Production`
1. Export your PCB

Depending on your tool of choice, the exact workflow will be different. What you want to do is export your PCB as a set of files called Gerbers, which are basically instructions for the manufacturer to build your PCB. It should be compressed into a .zip file.

The internet will help you out on this one. The end file you get should be named `gerbers.zip` and contain all the production files in it.

Put it inside the `Production` folder
2. Export your Case parts

Each individual part of the case should be exported into its respective files. For example, if you have a top, bottom, and middle part, you should have 3 files:

- `Top.STEP`
- `Bottom.STEP`
- `Middle.STEP`

If you can't export them as STEPs, STLs are okay too!

## Creating a new GitHub Repository

GitHub is a website that allows you to host your project files! A GitHub repository is an individual project that you can share with others

GitHub has an awesome guide on how to create & manage repositories. You can find it here: [Creating a new repository](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-new-repository)

Once you create a repository, make sure to clone it! Cloning it downloads a local copy to your computer & lets you sync it with the version on GitHub servers. GitHub also has a guide on this! You can find it here: [Cloning a repository](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository)

Once you have it cloned locally, drag and drop all your project files into the folder!

## Adding a README!

A README is essential to all open-source projects. It allows people to know more about you and your project without having to dig into every single

The README is pretty flexible, but you MUST include the following parts:

- A screenshot of your overall clock
- A screenshot of your schematic
- A screenshot of your PCB
- A screenshot of your case and how it'll fit together
- a BOM for your parts

Some examples of good repos are below.
- [Ducc's Fidget Toy](https://github.com/hackclub/hackpad/blob/main/hackpads/Duccs%20Fidget%20Toy/README.md) (W Ducc)
- [CYBERPAD-01](https://github.com/KaiPereira/CYBERPAD-01)
- [AngstromIO](https://github.com/Dieu-de-l-elec/AngstromIO-devboard)

## A few final notes
At the end of the day, a good ship is one with some care and effort behind it. Remember people (including you) might want to see or work off of your project one day, so make it look cool!

And of course, if you have any questions about how to make a good ship, feel free to ask in [#blare!](https://hackclub.enterprise.slack.com/archives/C0BC47NPFT9)
