You are browsing as a guest. Sign up (or log in) to start making projects!

Cirkuit

  • 27 Devlogs
  • 95 Total hours

Build your own circuits... using pixel art!

Ship #1

Hi!

I’m really happy to introduce you to my biggest project so far. It’s called Cirkuit, and it’s a logic circuit sandbox simulator… but with pixel art!

That means you can basically build anything using just pixels.

Why pixels? You may ask.

Well, many logic simulators already exist, but the issue is that most of them aren’t very accessible to the average user. That’s why I wanted Cirkuit to be as easy to use as possible.

I’m already quite familiar with TypeScript and React, which I used for this project. So the most difficult part was actually figuring out how to implement features without having 100 nested loops :D

I had a hard time figuring out how to build the core engine (obviously), as well as the annotation system.

I’m quite proud of how it looks and how well it works. This project was a perfect opportunity for me to improve my design skills. I worked hard to reduce friction between the interface and the user (aka you, dear shipwriters).

One piece of advice: try it on a computer with a mouse. Phones and trackpads are supported, but it’s not the best experience.

Hope you’ll like this project!

  • 27 devlogs
  • 95h
Try project → See source code →
Open comments for this post

1h 13m 32s logged

Devlog #27: Some optimization, code cleanup, and brand new readme!

That’s the last devlog for this project before I ship!

0
0
45
Open comments for this post

2h 42m 43s logged

Devlog #26: I’ve done many small improvements, such as:

  • ability to move annotations
  • undo/redo buttons
  • custom favicon

Next step: SHIP!

0
0
7
Open comments for this post

2h 27m 11s logged

Devlog #25: UI/UX improvements!

I improved the component selection outline. Now the outline is around the whole selected group of pixels, instead of around each individual pixel.

You can also now delete selected components by pressing Del on your keyboard.

And I added a little preview showing the pixel currently targeted by the cursor.

Next steps: keep working on the UI/UX, and ship!

0
0
9
Open comments for this post

2h 14m 7s logged

Devlog #24: New feature (kinda): the camera position and zoom are now stored in the project file, and loaded when you open the project.

That means you can setup any point of view in your project, and the viewport will be right where you left it when you open it again!

I also fixed a bunch of UI inconsistencies:

  • the hover label position is now responsive to the workspace sidebar (before, it was getting hidden behind it)
  • unified border colors
  • fixed the phone workspace responsiveness
  • made the sidebar on the right a little bit smaller

I also continued working on the 7-segment display, but ran into some issues since wires can’t cross each other. So I thought about having circuits on two different layers. What do you think about this?

Next steps: I’ll probably polish the UX a little bit more, and then ship the project. But I’m planning to keep working on it!

0
0
11
Open comments for this post

5h 20m 16s logged

Devlog #23: New feature: Undo/Redo!
You can now undo and redo things you’ve done in the editor. This works with both components and annotations.

I had to implement a project history system. Basically, every time an action modifies the project, the previous project state is added to the past history stack. When you undo, the latest state from past becomes the current state, while the previous current state is moved to the future stack. When you redo, the next state from future becomes the current state and the previous current state is moved back to past. Yeah it’s messy 😂

I’m also still working on the 7-segment decoder. I switched to a 3-bit one, I’ll probably include it in the demo.

Next steps: mostly UI and code improvements, and then I’ll probably ship it. I’ll keep working on it!

0
0
15
Open comments for this post

4h 35m 14s logged

Devlog #22: New feature: selection and copy/paste!

You just have to press “S” and drag your mouse/pad while holding the left click. You can then copy, paste, or move the selected pixels around.

Probably the most difficult feature I’ve worked on so far. I had to get some help from ChatGPT :’)

I think this will be my last devlog before shipping, since one of my other projects has been pending for 18 days now, so yeah… I’ll still keep working on this project though!

0
0
13
Open comments for this post

4h 16m 20s logged

Devlog #21: Some UI/UX improvements and started working on selection!

I’m currently working on the selection system. It works like this: Press S, then while holding it, drag the selection area with the left click. Once selected, you can copy, paste or move the selected block of pixels.

It’s not committed yet! It still requires some work.

Next steps: finish the selection feature, then add the clock. I also want to improve the UX as much as possible.

0
0
13
Open comments for this post

3h 38m 4s logged

Devlog #20: demo project and UI/UX update!
I added a demo project with a basic light/switch circuit, an OR and XOR gate, and a few annotations.

I also (and mostly) removed the old “Quick start” section. It was becoming kinda useless since pretty much everything was already covered by the demo project. So I replaced it with a little intro to the project, along with a table of the shortcuts.
I also added a little decoration to the bottom-left corner of the sidebar. I think it looks pretty dope!

Next steps: copy/paste and selection, THEN add a clock.

0
0
15
Open comments for this post

2h 20m 1s logged

Devlog #19: A little code cleanup!

I refactored the App.tsx file because it was handling too many different things. Now each hook has its own dedicated file. Small refactor, but definitely a needed one!

Next steps: add a demo project, improve the UI/UX and laptop pad support, add copy/paste and selection, and finally add a clock (eventually, at this point 😂)

0
0
11
Open comments for this post

7h 37m 10s logged

Devlog #18: You can save your work now!
There are now two buttons in the bottom-left corner: Open and Save.
Your projects are downloaded as .cirkuit files.

This part was actually quite challenging, mostly because of the file format validation and all the tests around it.

Next steps: clean up the code, cleanup the UI (it feels a bit messy right now), add a demo project, add copy/paste and selection, and add a clock

0
0
11
Open comments for this post

4h 55m 1s logged

Devlog #17: New feature: Annotations!
You can now add labels, lines and rectangles to your circuits!
I developed this feature so I can better explain what’s going on in the demo project when I’ll ship this project. But you can also use it to explain your craziest circuits!

Next step: upload/download projects.

0
0
18
Open comments for this post

4h 31m 22s logged

Devlog #16: Annotation feature (WIP)
It’s not finished yet, but I’m currently working on a new annotation feature. Why? Because I’ll need it to explain the circuits in the demo!

I’m adding this before the project download/upload system, because otherwise I’d have to refactor quite a bit of the system later.

Also, I’m starting to build a 4-bit 7-segment decoder in Cirkuit! (I started with the two easier segments lmao)

Next steps: continue working on the annotation system, then implement project download/upload.

0
0
14
Open comments for this post

4h 32m 59s logged

Devlog #15: I added a little guide!
The goal of this small guide is to explain a few things that might not be obvious to new users.
You can close and reopen it whenever you want, so it doesn’t get in the way while you’re playing.

It’s still available on the GitHub page if you want to give it a try!

Next step: add a minimal circuit loading system (so I can add a default demo circuit), and THEN I’ll add the clock 😂😭

0
0
16
Open comments for this post

4h 3m 44s logged

Devlog #14: New component: AND gate!
Now the two main gates are available (NOT & AND), so you can basically build anything with them!
In the screenshot below, I built a working XOR logic gate, both in a large and a condensed version.

A few changes since last time, apart from the new component:
The old NOT gate wasn’t working properly because the circuit actually handles 3 states (low, floating, high), while the NOT component only supported low and high. So now, “floating” is considered as “low”.

Also, there’s no longer real-time simulation, sadly. I had some issues with the logic gates: if you built them the wrong way, it could crash the entire webpage. So now you have to click on “Run simulation” to see the magic happen.
It’s a bit less cool than real-time simulation, but at least it doesn’t nuke the whole page anymore lol.

Next steps: UI/UX improvements, clock, and 1-bit memory later on

0
0
20
Open comments for this post

5h 34m 4s logged

Devlog #13: New component: NOT gate!
This component returns the opposite signal you give it: low becomes high, high becomes low.

I also improved the UI/UX. There’s now a new label in the bottom-left corner of the page that shows which component you’re hovering over with your mouse, and what its current state is. For example: “Wire | Low”, “Switch | Open”.

I also fixed the pixel rendering, because before there were some really thin lines between them. And now the sidebar is responsive!

Next steps: code cleanup, AND gate, clock

0
0
20
Open comments for this post

2h 22m 59s logged

Devlog #12: Wire states are now visually apparent! In the example below, on the first circuit, the first segment is high because it is powered by the source, while the second segment (connected to the lamp) is floating because the switch is open.
I’ve also fixed a whole bunch of UI issues.
You can try out this project on my GitHub page!
Next step (for real this time): adding a NOT gate (the clock will come later)

0
0
13
Open comments for this post

52m 13s logged

Devlog #11: I did some UI improvements, but before I commit, I’d like to have your opinion for the light component; which glow do you prefere?

0
0
12
Open comments for this post

44m 16s logged

Devlog #10: I added some tooltips so it’s easier to understand for you guys!
Next steps: Start writting an actual documentation, add new components

0
0
3
Open comments for this post

4h 3m 10s logged

Devlog #9: New component: Switch
This new component come with a new “simulation” mode, where you can interact with the components.
Next step: add small tooltips to the sidebar elements, add new components (clock, memory…)
It’s deployed so you can try it (see the project page)! I’d love to get some feedbacks.

0
0
7
Open comments for this post

43m 41s logged

Devlog #8: UI update!
Changes:

  • checkerboard background texture instead of the old grid
  • custom selector on the component palette
  • pixel art icons

Next step: new components (switch, clock, memory…)

0
0
12
Open comments for this post

2h 16m 32s logged

Devlog #7: Now power and light can be connected from all sides! Also, since the old arrows are no longer necessary (at least for these components), I improved the UX by displaying the actual component icon instead. The icons on the circuit are also hidden by default now, and only appear when you hover over them.
Oh and there’s an eraser now.
I also deployed the website: nafo44.github.io/Cirkuit/

Next step: add new components (switch, clock, logic gates, memory)

0
0
46
Open comments for this post

3h 4m 51s logged

Devlog #6: I wired up the simulation engine to the UI! It’s working really well, even tho there’s only 3 components right now (source, wire, light). I added arrows so you can easily rotate the components. I want this project to be really intuitive, so if you guys have some ideas to simplify this, I’m all ears!
Next step: let a source and light to power/be powered through all sides, add new components (switch, clock, memory)

0
0
30
Open comments for this post

4h 35m 5s logged

Devlog #5: Now the component placement UI side is wired to our circuit layout! It probably don’t make much sens for you right now. Next step: modify visually the component grid according to the simulation.

0
0
10
Open comments for this post

5h 49m 11s logged

Devlog #4: The other half of the engine is done! It can now compute components state (low, high, floating, conflict) based on the connections between each other. Next step: wiring the engine to the UI.

0
0
44
Open comments for this post

6h 34m 46s logged

Devlog #3: I’ve finished half of the engine of my website, made to let you create circuits using pixel art. It wasn’t easy!
I came up with a simplified netlist algorithm, to represent how a component (pixel) is oriented, how many are wired, to what, and through which side of the pixel. Components states aren’t handled yet, but that’s what I’m going to work on next.

0
0
24
Open comments for this post

2h 6m 52s logged

Devlog #2: I improved the UI, added mouse wheel support (to zoom and move the map). Now it’s time to work on the actual engine.

0
0
21
Open comments for this post

1h 37m 36s logged

Devlog #1: Hi! I just started making a website where you will be able to create circuits… with pixel art!
The idea is to add different pixels: wire (gray), power (green), light (yellow), logic gates (AND, OR, …), memory (simple true/false state storage).
I want to keep this as simple as possible to use.

0
0
16

Delete project?

Are you sure you want to permanently delete this project? This action cannot be undone.

All devlogs, followers, and associated data will be removed.

Followers

Loading…