Whiteboard for cool people ;)
Whiteboard for cool people ;)
In this stage I focused on creating the top toolbar for the editor. The goal was to introduce a central place for tools that interact with the canvas and begin shaping the overall workflow of the application.
Most of the core structure for the toolbar is now in place and it already integrates nicely with the rest of the interface.
At this point the toolbar is mostly functional:
One thing that is still missing is the Select tool, which hasn’t been implemented yet.
There’s still a lot of good work ahead of me, but with every devlog I can clearly see the progress.
Log in to leave a comment
In this stage I started working on the rendering layer for the canvas. The goal was to finally have a place where the visual side of the project could be tested and iterated on more easily.
The main focus of this step was getting the canvas to render properly and creating a simple entry point so it can be tested independently. Until now most of the work was focused on logic, so this part was about actually seeing things on the screen and interacting with them.
At this point the canvas already supports a few basic interactions:
Technically the undo/redo system is already implemented, although in the demo video I forgot to actually rebuild the project after adding it, so it doesn’t appear there. Classic moment.
In the next stage I’ll move on to creating a prototype toolbar. The idea is to start introducing basic tools that interact with the canvas so the editor can slowly take shape.
Log in to leave a comment
Devlog #005 — feat: useWhiteboard Hook
In this stage I worked on a custom React hook called useWhiteboard to handle the whiteboard state.
The hook keeps state in a few parts:
History is handled with useHistory so we can undo/redo and know if it’s possible (canUndo / canRedo).
Functions to manipulate the board:
addElement – add a new elementdeleteElement – remove an element by idclearAll – remove everythingloadElements – load elements and set camera (handy when restoring a saved board)The hook returns everything you need: elements, camera, tool, color, stroke width, plus all the functions for adding, deleting, clearing, undo/redo.
Next step: move the Renderer out of the component into pure functions and start doing simple tests.
Log in to leave a comment
Devlog #004 — feat: useHistory Hook
This stage was about making a custom React hook called useHistory for undo/redo.
The hook keeps state in three parts:
past – previous valuespresent – current valuefuture – values for redoWhen you call set:
present goes to past
present
future is clearedUndo moves the last item from past to present and pushes the previous present into future.
Redo does the opposite.
The hook returns the current state, plus set, undo, redo functions, and canUndo / canRedo flags.
Next step: creating hooks for the whiteboard to manage central state for elements, camera, tools, and colors.
Log in to leave a comment
In this stage, I worked on adding a math parser to the project. This parser allows the app to take text input representing a mathematical expression, convert it to proper JavaScript syntax, and evaluate the result.
The parser lets the user enter a mathematical expression, like 2^3 + sqrt(16), and optionally provide a value for x. The program then calculates the result and returns it.
Readline Import – used to get input from the console.
REPLACEMENTS Array – a set of text replacements that convert input into JavaScript Math function calls:
^ → ** for exponentiationsqrt(x) → Math.sqrt(x)
sin, cos, tan, asin, acos, atan → corresponding Math functionspi → Math.PI
e → Math.E
abs, floor, ceil, round, sign, max, min, log, ln, exp
evaluate(expr, x) Function:
new Function("x", ...) to evaluate the expression.NaN if the result is not a valid number or is infinite.Log in to leave a comment
.wth File FormatIn this stage, I made a pretty significant decision — I removed the landing page entirely.
After thinking about it, I realized that no one really cares how the landing page looks. What actually matters is how the product works. The real value is in functionality, not marketing visuals.
So instead of polishing sections that don’t move the project forward, I decided to focus on the core logic and technical foundations.
The landing page was a good design exercise, but it didn’t contribute to the core experience. I want to build something real — something that works — and validate the idea through functionality, not aesthetics.
So I deleted it and moved straight to the essence of the project.
fileFormat.ts and whiteboard.ts
I started working on the core structure of the app ;)
im sending photo of my inspiration
Log in to leave a comment
In the first stage, I created the project and built the initial Hero section.
At the beginning it looked pretty bad, but after several iterations and adjustments it now looks clean and much more polished.
I decided to go with a dark design direction, using purple and dark green tones as the main accent colors. The goal was to create a modern and slightly moody visual style that fits the overall vibe of the product.
Below is the current look of the Hero section in the beta web version.
In the next devlogs, I’ll continue building out the remaining parts of the landing page.
ps - tell me what should i change here ;))
Log in to leave a comment