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

nicholas1023

@nicholas1023

Joined June 18th, 2026

  • 13Devlogs
  • 3Projects
  • 3Ships
  • 15Votes
Ship

I made a custom new tab which uses NASA's APOD API as the wallpaper which refreshes everyday. It allows you to select a search engine for your queries with just a click. For example, you could select Google, Bing or DuckDuckGo for daily searches and GitHub to search for repositories. You can also add frequently visited URLs to the pin section which will store them in localStorage. It looks much like a normal new tab page, but it aims for a simple and minimalistic page without clutters that built-in new tab pages have with automatically added bookmarks. One feature I'm proud of is the search engine selection dropdown. Most browsers only allow you to change that in their settings, but mine can be switched easily to fit the context of your search! You can try it out at https://nicholas1023.github.io/new-tab/!

Try project → See source code →
Open comments for this post

2h 23m 2s logged

Added URL Pin function to my new tab site!

What’s New

Added a function to pin your favourite URLs for easier access with localSotrage to ensure they stay even after reloads. Instead to showing the website’s name, it displays it’s favicon for a simpler UI.

Problems I’ve Faced

It took me quite a while to debug the localStorage function. It turned out that the issue was the parsing and storing URLs as an array.

0
0
15
Open comments for this post

3h 0m 21s logged

Finished the basic functions of my APOD new tab page!

What I’ve done in this devlog

  • Set up the API Key for APOD
  • Create the basic UI and functionality for the new tab page.

Problems I faced

My site was initially deploying via pages-build-and-deployment, which led to the API not working. After some time and many git commit --allow-empty -m "Trigger pages build", I finally found out what the problem was! I didn’t change it to build via GitHub Actions. After changing that, it worked quite well. Another problem I faced was the timezone difference with my country and APOD’s API. I received 500 errors when calling them. It worked in the end when i used yesterday’s date!

What’s next

I’ll be thinking of what other features I should add to my new tab page, and implement them in the next devlog!

0
0
4
Ship Pending review

I've made Macro Microcontroller 2, a microcontroller development board and macropad with a custom BASIC interpreter firmware created in C from scratch! I'm proud of the PCB itself as I was surprised my board works well physically, as it was my first attempt creating one with a bare MCU chip on it! TO accompany the firmware and hardware, I created a documentation site to share more details as well!

Documentation: https://nicholas1023.github.io/macro-microcontroller-2/

  • 8 devlogs
  • 10h build
Video of Project → See source code →
Open comments for this post

3h 40m 21s logged

Finally received the board and soldered the parts on!

In this devlog, I made some changes to the firmware and released v0.0.3 that adds support for comments:

10 REM This is a comment that will be ignored!
20 PRINT "Hello world!"

I’ve also added a more detailed programming guide for my custom BASIC Interpreter.

Difficulties I’ve faced

I had some trouble soldering the keyboard switches on as it was moving everywhere. I’ve attempted applying tape, but it did not work as the temperature was too high.

I’ll be tidying up the repo and get ready to finally ship🚢 my project!

0
0
6
Open comments for this post

2h 55m 43s logged

Updated the firmware and ordered my PCB and parts!

In this devlog, I’ve added a new function to my custom BASIC interpreter for my development board, and finally sent my PCB for manufacturing!

It took me quite a while to write the random number function that the old BASIC interpreters used to have: RND. I did many rounds of trial and error to finally create a working code (the previous code was returning either nothing or throwing compiler errors due to data types):

printf("%f\n", (float)rand() / (float)RAND_MAX);

Here’s a sample program you could run that generates a random number, stores it in a variable and prints it:

10 let x = rnd
20 lsvar
30 print x

Now, I’ll be working on support for comments in my interpreter and wait for my parts to come. I can’t wait to assemble my macropad + dev board!

0
0
4
Open comments for this post

1h 15m 23s logged

More updates to the documentation site!

Today, I changed the layout and content of the documentation website and made it responsive for mobile devices! I initially wanted to add a 3D viewer to display the .glb file for rendering, but it did not output the result I wanted. (The silkscreen was not appearing!) I’ll read up on more about it, and hopefully, I would be able to add the 3D model into my documentation!

0
0
3
Open comments for this post

2h 35m 8s logged

Created a documentation site for my microcontroller!

In this devlog, I improved the documentation of my project by creating a simple website to share specifications, schematics, and provide a direct link to download firmware and 3D print files. You may view it at https://nicholas1023.github.io/macro-microcontroller-2!

What I’ll be doing next

Next, I will be ordering the PCB and electronic components and finally solder them together!

0
0
3
Ship

I made a web-based OS that includes a panel with a clock and power off button, a file viewer, a terminal version of my personal website, and a web app installer that allows you to install websites that are not web app as well. The most challenging part was the web app installer as I needed to develop the logic to integrate the website as an app and allow them to have a top bar as well. I was quite surprised with the result, as it was able to make a website look like a native app (In fact, the terminal is a web app!) and the power off button made it really look like a real low level OS running on a computer. One thing to note is that the installer is not able to launch sites that disallow 3rd party embedding.

Try project → See source code →
Open comments for this post

2h 24m 34s logged

New app installer for my OS!

In this devlog, I have created an app installer that installs a website as an app, much like how a web app works. However, this function only works for URLs that allow embedding.

I have also solved a bug where apps dragged past the viewport creates a scrollable viewport by adding this:

overflow-y: hidden;
overflow-x: hidden;

I’ll be shipping it soon! Try my OS out at https://nicholas1023.github.io/Nicholas-OS/!

Here’s a demo video of the installer installing hackclub.com as an app!

0
0
4
Open comments for this post

2h 22m 28s logged

Added new apps to my OS!

I’ve added a file viewer and terminal app to my operating system!

What’s new?

  • Window dragging finally works!
  • Windows are able to move to the front!

Problems I’ve faced

I had issues making a window come to the front when clicked or move. Initially, I was using .style.zIndex++, but it did not seem to work when a window was clicked multiple times. To solve this, I changed all the z-index of all windows when one is clicked, to ensure all of the values sync.

The buttons on the top bar are currently text-based, so I’ll be creating icons for them, and to declutter the buttons top bar on apps.

0
0
3
Open comments for this post

2h 1m 4s logged

Finished the windowing system and a bottom panel!

What’s new

  • Loading screen
  • Windows with maximise, minimise and close buttons
  • Bottom panel with time and power off button

What I’ll be working on next

Next, I will be making the windows draggable, and creating icons for the apps.

I’ll also be improving the loading screen, which currently only consists of the following code.

<div id="boot">
    <div style="text-align: center;">
        <h1>Nicholas' Operating System</h1>
        <p id="loading">Loading...</p>            
    </div>
</div>

Problems I faced

When creating the window functions, which manages maximise, minimise and close buttons, it did not seem to work. I realised later that the function name was actually overwriting a built-in function as it was initially named close()! In the end I renamed it to closeW(), where W stands for window.

I also faced issues with the height of the <main>. Initially, the height of main was set to 100%, which failed to work. After some searches online, I tried replacing 100% with 100dvh, which worked perfectly!

0
0
2
Open comments for this post

3h 1m 11s logged

Finished the enclosure and organised the repository!

Today, I have completed the 3D case for Macro Microcontroller 2 and did some minor bug fixes for the BASIC Interpreter. I needed to reassign the GPIO pins from the first revision of the board.

Although the interpreter is currently still basic, it supports 4 BASIC statements and 4 custom statements for controls.

What’s new in this devlog

  • Text and key labels for enclosure with cover
  • Organised repository
  • New KEY statement for hardware GPIO control
0
0
3
Open comments for this post

2h 4m 14s logged

Halfway through my PCB’s case!

What I’ve done in this devlog

For the first-half, I added silkscreen text to the PCB for the IO components (GPIO Pins, Keyboard switches, LEDs…). Next, I moved on to designing the enclosure. It took a while for me to get used to using a new app to design it.

Modifications to the PCB

  • Added screw mounting pads for easier mounting.
  • LEDs moved closer to each other for space to add silkscreen designs.

Problems I’ve faced

The screw holes were not appearing during the first few attempts, but it worked in the end when I placed it manually, instead of using the move function.

Creating the cutout for the USB connector took me about 15 mins as I needed to measure the length and clearance needed for a micro-USB plug and create another sketch before extruding it as a cutout.

What I’ll be working on next

Next, I’ll be continuing with the enclosure design, adding a cover with a keyboard plate, and finally moving on to the BASIC interpreter firmware for it!

0
0
3
Open comments for this post

2h 1m 39s logged

Finished routing my microcontroller board!

Did most of the routing for the MCU and macropad segment today, but I might need to do some rewiring for the flash memory as the trace length for SD0 and SD2 are very different (5.57 & 13.2 mm).

What has been added since the last devlog

  • Added power LED
  • Added pin headers for GPIO and power
  • Added barrel jack in case if the DC motor drains too much power

What I’ll be doing next

Next, I’ll be adding more silkscreen text, and maybe design an icon for my macropad + microcontroller board. I’ll also be creating a custom enclosure for my device!

0
0
3
Open comments for this post

2h 22m 57s logged

Finished the schematics and a little of the BASIC Interpreter for my microcontroller board!

What I did today

  • Redid the old schematics by adding custom RP2040 circuit instead of a using a dev board.
  • Added new GPIO devices such as DC motor and a buzzer. (for the BASIC interpreter)
  • Started on PRINT, LET and INPUT for the interpreter.

What I’ll be doing next

Next, I will be focusing on the BASIC interpreter firmware, working on variable assignment and math operations and testing it on a real pico board! Also, I will be starting on the layout and BOM as I have completed the schematics!

0
0
6

Followers

Loading…