|
47953
|
Rust learning by @habdaljalil10 | Stardance
|
habdaljalil10
|
0
|
12.83
|
0
|
[]
|
[{"post_id": 50573, "ts": "202 [{"post_id": 50573, "ts": "2026-08-19T19:33:29Z", "hours": 1.55, "text": "I finished the Rust Book chapter on Structs today. It’s very interesting because you can implement methods(called associated functions) and make constructors."}, {"post_id": 49855, "ts": "2026-08-18T20:05:31Z", "hours": 9.4794, "text": "Currently learning about rust structures; haven’t posted in a while, but I’m loving memory management, and I think that the Rust Online Book does a fantastic job at explaining concepts."}, {"post_id": 47197, "ts": "2026-08-14T22:55:25Z", "hours": 1.7969, "text": "I am working on improving my Rust skills by using the official online book. Today, I made the guessing game and learned about taking input, formatting it, and using arms(yes, they’re called that) to match results to actions."}]...
|
Title: Rust learning by @habdaljalil10 | Stardance Title: Rust learning by @habdaljalil10 | Stardance
Devlogs:
I am working on improving my Rust skills by using the official online book. Today, I made the guessing game and learned about taking input, formatting it, and using arms(yes, they’re called that) to match results to actions.
Currently learning about rust structures; haven’t posted in a while, but I’m loving memory management, and I think that the Rust Online Book does a fantastic job at explaining concepts.
I finished the Rust Book chapter on Structs today. It’s very interesting because you can implement methods(called associated functions) and make constructors....
|
1792536528.3889012
|
1793141328.3889012
|
|
43115
|
The Amazing Keylight by @Ronak | Stardance
|
Ronak
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: The Amazing Keylight by @Ronak | Stardance
|
1792536529.3121667
|
1793141329.3121667
|
|
44701
|
StudyBuddy by @Vedant_Daga | Stardance
|
Vedant_Daga
|
2
|
76.0
|
1064
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-09-12T03:35:26Z", "hours": 23.0, "multiplier": 18.54, "payout": 436, "blessing": "neutral", "text": "StudyBuddy - https://trystudybuddy.vercel.app fyi before u try it: reading runs on a free model with a shared daily cap, and ship day is way more traffic than a normal day. please use the sample worksheets wherever u can (they’re the first thing on the upload page, one click) and upload at most one of ur own pdfs for the next day or two. if the homepage says the free reads are used up, the samples still work. what it does upload a worksheet pdf. it reads every question off the page, tags each one by topic, and works out the answer key. u mark which ones u got wrong and it brings them back on an FSRS schedule (the algo anki uses). across every test u upload it turns “i got 12 wrong” into “ur bad at ratios”. what changed since last time runs on openrouter’s free tier instead of my gpu. not a proof of concept anymore one worksheet is ~4 requests instead of ~42. pages are read in groups the site says when the day’s free reads are running low. clear about the trial: 3 worksheets free, then still free, u just add questions by hand or plug in ur own key. what was hard free models reason before they answer and bill that against the output limit which ends up causing an error, but its really hard to figure out the embedding-only shortcut for sorting looked fine and was wrong a third of the time so fixed it", "repo": "https://github.com/DagaVedant/StudyBuddy", "demo": "https://trystudybuddy.vercel.app/"}, {"ship_num": 2, "ts": "2026-08-19T19:30:17Z", "hours": 53.0, "multiplier": 12.7, "payout": 628, "blessing": "neutral", "text": "StudyBuddy Turn the worksheets you have already done into a record of what you actually know. Try it: https://trystudybuddy.vercel.app Code: https://github.com/DagaVedant/StudyBuddy What I made Upload a worksheet you already finished, as a PDF or photos. A vision model pulls out every question, its options and its answer key. You mark what you got wrong. That is the only input it needs. It sorts questions into 87 topics across SAT and competition maths. Then it ranks your weak areas and schedules revision using FSRS, the algorithm behind Anki. It also writes practice questions on your weak topics and exports misses to Blooket. Built on my own past papers: 387 real questions from 22 worksheets. What was challenging The models can run in four places: my GPU, your API key, your own Ollama, or not at all. A student with a GPU should never send homework to my server. A student with nothing should still get something. Topic tagging needs an embedding model that serverless hosting cannot run. So the shortlist is a pgvector query on the server and the vector is computed anywhere, including in your browser under WebAssembly. Worst bug was three characters: I stored the global fetch on a class field, which passes the object as the receiver. Node allows it, browsers throw Illegal invocation. Every test passed and the only runtime that mattered was broken. What I am proud of It does not lie to you. Weak topics are ranked by a Wilson lower bound, not a raw percentage, so two unlucky answers cannot fake a weakness. Model-written questions are kept out of your accuracy, so the ranking cannot feed the questions it generates. Every model response is schema-checked before it reaches the database. Generated practice is sifted against thirteen specific failure modes. When my GPU is off, the upload screen says so instead of spinning. 1,459 unit tests, 84 end to end, 293 commits. How to test it Sign in with Google, or an email and password. Upload any worksheet you have already done. A past paper works well. Check what it read. Each question sits beside the page image it came from. Mark what you missed, then open the dashboard. The free trial reads three worksheets on my own GPU. If it is off, your upload queues and the app tells you. To skip the wait, settings takes your own API key or connects to Ollama on your machine. guys i wish this was markdown compatible but its not so sorry", "repo": "https://github.com/DagaVedant/StudyBuddy", "demo": "https://trystudybuddy.vercel.app/"}]...
|
[{"post_id": 66334, "ts": "202 [{"post_id": 66334, "ts": "2026-09-12T03:21:31Z", "hours": 3.7986, "text": "Devlog 24: StudyBuddy so a lot of the feedback said “cool but it needs ur gpu on”. that made it seem like a PoC, so now its running on the free tier of openrouter. making the free tier work one request per question was never going to fit a daily cap. extraction now sends up to 10 pages / 25 questions per call, sorting and answer key go 10 questions at a time. ~4 requests per worksheet instead of ~42 the homepage and upload page count the day’s calls. 80% says busy, 100% stops reading and points u at the samples. samples upload page leads with the three samples as one-click cards; ur own pdf is the second option and says how much of the shared allowance is used. removed phone photo uploads (highly innaccurate on the free tier of models i have)"}, {"post_id": 61499, "ts": "2026-09-04T13:23:50Z", "hours": 0.4864, "text": "Devlog 23 - StudyBuddy i just had some minutes left on this so im just making the devlog still waiting for my ship to be approved (been waiting a few days) no big changes at all (waiting for feedback)"}, {"post_id": 57722, "ts": "2026-08-29T23:49:06Z", "hours": 0.3544, "text": "Devlog 22 - StudyBuddy fixed more bugs and rewrote code by hand"}, {"post_id": 56688, "ts": "2026-08-28T15:28:49Z", "hours": 3.3164, "text": "Devlog 21 - StudyBuddy patched even more bugs rewrote tons of my code (ai to human) cleaned up old files (a lot of old features were removed and reupdated) just more QoL fixes"}, {"post_id": 55293, "ts": "2026-08-27T01:04:56Z", "hours": 0.7281, "text": "Devlog 20 - StudyBuddy more bug fixes continous reships (they keep saying its too AI generated even after i rebuilt the UI) started working on the API key integration (like almost there rn) tons of dead code removal and code clean up added support for firefox too (now it works on edge, firefox, chrome, and prolly a ton others i just havent really tested it)"}, {"post_id": 55212, "ts": "2026-08-26T19:29:14Z", "hours": 2.0147, "text": "Devlog 19 - StudyBuddy even more bug fixes so i pushed a change, and that somehow broke the entire pipeline so i patched it no real content just fixes going to add API key integration soon (follow to see it happen)"}, {"post_id": 54267, "ts": "2026-08-25T04:59:03Z", "hours": 1.3939, "text": "Devlog 18 - StudyBuddy lowk not a lot of content in this one but like 1000000 different bugs popped up and reviewers are pointing it out so thank you smmm ( @blowupthenoobs ur the goat) fixed the trials having no limit other fixes just check my commits"}, {"post_id": 53477, "ts": "2026-08-24T01:28:48Z", "hours": 6.445, "text": "Devlog 17 - StudyBuddy (ah im losing track of these devlogs uh my ship keeps getting rejected for look to AI, and ive literally rebuilt everything, removed all teh ai generated thing. (im gonna ship again rn) made a logo cuz i thought it would look cool added a Terms of Services page cuz its risky cuz people could upload worksheets they dont have access for an i could be fried so i made them agree to that cleaned up more code fixed a few more bugs"}, {"post_id": 51966, "ts": "2026-08-21T23:14:31Z", "hours": 0.5383, "text": "Devlog 16 - StudyBuddy added some sample worksheets so you can try it out added the borders back to the buttons because i accidently removed them before"}, {"post_id": 51893, "ts": "2026-08-21T19:51:51Z", "hours": 0.3522, "text": "Devlog 15 more cleaninggggggg cleaned up repo, removed more dead logic and stuff instead of a css wallpaper, i added a image of lined paper to really give that school/learning feel asked ai to help me get the ui to look kinda fresh and add the pencil style heading"}, {"post_id": 51715, "ts": "2026-08-21T15:23:46Z", "hours": 3.1414, "text": "Devlog 14 shipwrights rejected the project so im fixing their things decided to clean up the code, get rid of old functions, and i also cleaned up the UI because no one really needs the heading and then what it means, like i think you know that topics means topics and doesnt need a whole sentence after that. cleaned up the repo, got rid of ai generated code fixed a 500 error when uploading worksheets, cuz something happened and some linux kernel wasnt compaitble with the library i was using wrapped up my last few fixes lowk not a lot of new features, rather like fixes"}, {"post_id": 51288, "ts": "2026-08-20T20:55:12Z", "hours": 0.9239, "text": "Devlog 13 - StudyBuddy update the ui to make it look liek sticky notes and lined paper"}, {"post_id": 50557, "ts": "2026-08-19T19:22:57Z", "hours": 1.2472, "text": "ANYONE RATING THIS PROJECT - THE VIDEO ON THE SHIP IS OUTDATED, THERE IS ALSO ANOTHER FEW DEVLOGS SO CHECK THAT OUT BEFORE JUDGING BECAUSE IT GIVES MORE INFO ABOUT THE BUILDING AND WHY THE CHANGED A LOT SORRYYYY ALSO USE THE SAMPLE WORKSHEETS I ATTACHED OR EASILY PARSEABLE WORKSHEETS. TEMPORAILY IVE CLOSED THE API KEY VERSION AS MOST PEOPLE DONT HAVE THEM. COMPLEX WORKSHEETS ARE TO BE USED ONLY WITH LARGE LLM Devlog 12 - StudyBuddy got everything ready to ship turns out that ollama needed some permissions so fixed that and added it to readme for people to set up, and other stuff like that shipping it in 5 mins 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉"}, {"post_id": 49640, "ts": "2026-08-18T15:06:19Z", "hours": 3.8678, "text": "Devlog 11 - StudyBuddy this is a short one got the google sign in to work added email verification and forgot ur password thing cleaned up the overall UI made the topic tree standardized cleaned up some of the extraction issues added ollama integration for everyone added practice question generation, topic overview, etc tested everything fully the attached image is the app after a ton of testing *"}, {"post_id": 48576, "ts": "2026-08-17T00:58:42Z", "hours": 5.8406, "text": "Devlog 10 - StudyBuddy mostly the same bug wearing different clothes: a screen that exists, that u can get to, that quietly does less than it says tier C was sitting in settings doing nothing save an ollama address and the app resolves u to a browser executor. that executor had nowhere to go, so ur worksheet just sat there looking queued it claims the job now and reads each page against localhost:11434 , posting back through the same queue my gpu posts through has to run in the browser cuz a server cant reach ur localhost, so the tab stays open. checkpointed per page tho, closing it resumes instead of restarting the paper a mark u mis-tapped was permanent tap through 40 of these and ur going to hit the wrong one eventually that one tap feeds the FSRS schedule, the topic accuracy, the weakness ranking and the blooket export only way back was deleting the worksheet and uploading it again, which costs u a trial credit. so the fix for a mistap was paying for it two defences that were never on WORKER_ALLOWED_IPS was optional and empty meant no restriction empty is the state every deployment starts in, so the normal outcome was a defence thats off that nobody ever decided to turn off refused now. * still allows any address but somebody has to type it untagged worksheets looked identical to broken ones tier B cant auto-classify, the embedding model needs a native runtime the serverless host doesnt have so ur questions saved fine and were reviewable fine, they just had no topic and nothing said why. reads exactly like it silently failed every tier that can come back untagged says so now nothing told u when a worksheet finished u uploaded and then u guessed. sat on the status page or came back later and hoped in-app bell that needs zero setup, plus web push for a tab u closed also “Review these now” now reviews those questions. the word had drifted onto three screens meaning three different things dashboard was missing three of its panels, and the trend arrow was specified ages ago and never computed taxonomy had no front door and the subject panel only went one level deep. Math > Geometry > Triangles walks now pagination was capping at the fiftieth worksheet and saying nothing about it the AI setup prompt showed up after ur trial ran out, which is the one moment it cant help u grouped scripts/ by what it does to ur data. inspect/ reads, repair/ writes behind a guard, benchmark/ measures 1285 tests green. playwright hasnt run yet and app/ moved a lot this time, so thats next"}, {"post_id": 47159, "ts": "2026-08-14T20:52:31Z", "hours": 5.0856, "text": "Devlog 9 - StudyBuddy the merge tool could double up a question number renumbering the survivor of a duplicate pair used Math.min of just those two rows, blind to the rest of the paper merging a phantom #5 into a real #9 could hand the paper a second #5, the exact thing the tool exists to prevent zero tests on a function that deletes rows. five now, including the repro $15/hour was losing its sign, not just $5 the math-stripper runs from one $ to the next, so “earns $15/hour and $18/hour” reads the slash as a fraction and eats both signs. same with $40 = $25 + $15 on the = i wrote this down once as “one weird case.” it’s the whole unit-rate and equation category fix checks the char after the closing $ : a digit means it’s opening the next price, not real math figure crops didnt need a new pipeline, just reusing one filed as “never produced,” which reads like crop, store, backfill the verify screen already computes a crop window from the bbox over the stored page image. review got wired to the same math, every old worksheet gets it free the real work was the guards: zero-area, inverted, off-page, or no recorded page size all have to degrade to nothing rather than to the wrong crop a fence i built to be un-escapable, wasnt the comment says a new tag can’t be added without going through the escaping. page-seam work added two by typing them directly a page whose OCR contains the literal closing tag closes the fence early, and everything after reads as instructions instead of data tag list exists once now, every fence built from it every worksheets.status write was a bare UPDATE no guard on the current value, so a stale job retry could drag an already-reviewed worksheet back to failed one transitionWorksheet(from, to) now, every write through it preview deploys were migrating the prod database guard only checked VERCEL_ENV === 'production' , but previews fire on every push against one shared DATABASE_URL two finishing together were racing through the migration folder 9 tests could go quiet and nobody would know one e2e file, 12 tests serial in a single tab, everything past “verify” depending on a question a drag gesture created three tests earlier a drag regression silently skipped 9 unrelated tests instead of failing them api fixture, split the file, broke the drag on purpose to prove it. held the question list rendered all 114 cards for a screen that edits one at a time deferred a while back: virtualizing editable rows risks one unmounting mid-edit only one card can ever be expanded, so the risk surface is exactly one row virtualizes past 40 now, open row pinned into the rendered range wherever scrolling goes. typed into one at 60 questions, scrolled thousands of px away, still there, still focused, still holding the edit also profile save had devlog 4’s router.refresh() remount bug login rate limit skipped Auth.js’s own credentials endpoint ollama worker had no startup timeout and just hung worksheet text leaked into console logs on schema rejections review screen shipped every page’s OCR text on page-1 load admin console got merge, tree edit, queue, usage doc-count drift (third time), and a false-positive LaTeX check flagging real set notation as broken math"}, {"post_id": 46100, "ts": "2026-08-13T02:23:56Z", "hours": 3.2192, "text": "Devlog 8 - StudyBuddy im too lazy to have a full write up for this (watched spiderman tdy IT WAS REALLY GOOD) for each topic that a user gets wrong, a seperate model (gpt-oss:20b, sorry if i miswrote the model) gives a walkthrough of the topic also added missed questions to the csv export added a AI answer key system if the worksheet doesnt have one."}, {"post_id": 45521, "ts": "2026-08-12T02:04:02Z", "hours": 3.0014, "text": "Devlog 7 - StudyBuddy the drag box was broken in the real app. for months u upload a worksheet, u draw a box around question 1, it fills in. thats the whole manual editor, thats the whole free tier. and it didnt work. click through the app to get there and nothing responds. reload and its fine. four previous commits went looking for this. the test had a 24 line comment explaining why it was probably a test problem. it was not. elementFromPoint(100, 28) -> HTML elementsFromPoint(100, 28) -> [HTML] thats the browser saying nothing is at this pixel , for every pixel on the page. the cause was 8 view transition animations, 6 stuck running forever . one that never finishes sits in the top layer and covers everything. and its a pseudo element so it shows up in no ancestor walk and no element stack, which is why every previous investigation contradicted itself. bisected on clean builds: next flag react component result on on broken off on broken on off clean off off clean so its react’s <ViewTransition> , not next. three lines of css. the drag test used to fake the mouse with dispatched events, now it uses a real one, which is the only thing that proves anything. gemini has never completed a single request 4 providers in settings. one says “has a free tier worth starting on”. zero successful calls, ever. every nullable field is anyOf: [{type:'x'}, {type:'null'}] gemini doesnt understand anyOf , so a filter strips keywords it rejects the filter dropped anyOf and left {} behind, while leaving the field in required a required field with no type = rejected request. every time funny part: the allowlist already had nullable in it, gemini’s own word for the same idea. someone knew. nothing connected them. the landing page was lying about 3 of its 4 topics theres a comment above them saying “kept honest on purpose: these are real taxonomy names” . Ratio & proportion - not real Linear equations - not real Reading inference - not real Vocabulary in context - real so the one claim the page made about its own honesty was the false one lol. theres a test now instead of a comment. tests found 2 bugs i wasnt looking for new Date(\"sometime in 2010\") returns jan 1 2010, cuz v8 scrapes a year out of almost anything. and it parses as local midnight while everything next to it is UTC. on a 13th birthday thats the whole question one route answered 404 to someone with no session. the client sends u to sign in on a 401 and brings u back after, so a tab that sat open till the session expired just ate what u typed the rest a reload could cost u a 114 question paper. markup saves nothing till every question is marked, so its a local draft now / , /signin , /signup are static html now. the topbar called auth() from the root layout, which made all 39 routes render per request the 23mb embedding model was getting fetched inside a background task on every cold start, and failing silently one commit recorded 32 renames and none of the code . the git add failed and i’d redirected the error away so i never saw it"}, {"post_id": 44852, "ts": "2026-08-10T21:45:18Z", "hours": 1.3739, "text": "Devlog 6 - StudyBuddy u can throw everything u got wrong into blooket now button on the dashboard for the whole account, and one per worksheet if u only want that paper it gives u a file, u upload it to blooket, u get a set of exactly the questions u missed wrong means ever wrong, not currently wrong. if u got it wrong on paper and then right in review, its still in there. thats the one u actually want to drill and it wouldve been weird to leave out blooket hands u an .xlsx template so everyone calls this an xlsx export, but its uploader only accepts csv. took a while to work out also its importer just silently imports nothing if the file is slightly off. no error, no warning, zero questions. three separate ways to trip that picking a subject barely did anything theres a dropdown on upload for what subject the worksheet is. it offers things like “Algebra 1” only the first bit of that was ever used, so picking Algebra 1 searched all of high school maths. exactly the same as picking “all of high school maths” the one control u have over how ur questions get sorted, doing basically nothing long papers were quietly losing questions to a limit the topic tagger takes questions 100 at a time. fine except it grabbed 100 in no particular order and then removed the ones already done, so on a 114 question paper 14 never got looked at, and which 14 was down to whatever the database felt like that day worse on a second pass: if 100 were already tagged it handed back an empty list, which reads as “nothing left to do”, and the rest never got tagged at all two screens counting the same paper differently the worksheets page filters out page junk like “CONTINUE TO THE NEXT PAGE” before counting. the dashboard didnt so the same worksheet was 25 questions on one screen and 26 on the other, and nothing tells u which one is lying the chart was lying about time the accuracy chart draws a bar per week. it was only making bars for weeks u actually did something in so 12 bars looked like 12 weeks in a row but werent. practise in march and again in june and u see two bars side by side like it was steady every week is a bar now, empty ones included, and it says which weeks its showing scrolling changed my settings without me touching anything the page range and question count boxes were number inputs, and number inputs treat the scroll wheel as a way to change the value so scrolling down the upload page with ur cursor over one of them silently rewrote which pages get read found a pile of other accessibility stuff while i was in there: buttons a bit too small to reliably hit on a phone, cards that vanish in high contrast mode, and a “skip to content” link that didnt actually skip anything also asking to see an explanation u already had was using up ur hourly limit for generating new ones the topic picker was built in a way that made screen readers think the list had nothing in it button labels were half Title Case and half sentence case, sometimes on the same screen"}, {"post_id": 44789, "ts": "2026-08-10T20:01:20Z", "hours": 1.8522, "text": "Devlog 5 - StudyBuddy “accept the remaining 114” checked none of them that button fires one save per question, and on my test paper thats 114 of them at once nothing read the answers back, so a save that failed looked exactly like one that worked the tick stayed on, u moved to the next screen, and it was never stored deleting a question said “Saved” and then didnt delete it delete waits a few seconds so u can undo it. it dropped the question from the list first and threw away whatever came back from the server so if it failed u got told it saved, and the question showed up in ur study queue later like nothing happened also there was no undo button anywhere. it was just a slow delete $5 was being eaten maths sometimes comes wrapped in dollar signs so i strip them off. money also comes wrapped in dollar signs “Sam has $5 and Ana has $12” was being read as “Sam has 5 and Ana has 12” checked a real saved question and yep. paper says $5, database said 5 if my worker died, ur worksheet said “queued” forever the machine that reads the pages runs at my house. if it fell over mid job, nothing anywhere ever marked that job as failed it just sat there, and the free credit it charged u never came back the topic tagging could fail without failing it needs a bit of software thats not always there on the server. when it wasnt, it came back with “no matches” which is a completely normal answer. so the job finished, every question was untagged, ur weak areas page was empty, and nothing anywhere was an error one i was told to do and didnt had a note to cap the page number by how many pages the worksheet has except if u upload pages 10 to 15 of a pdf thats six pages numbered 10 to 15, so that check refuses every single one of them capped the two things separately instead also the screen asking u to check questions against the page never showed the page finishing a review session stopped saying u finished it the AI could print its own error onto ur status page, which sometimes meant quoting ur own worksheet back at u the upload checked the image size by asking the browser instead of opening the image"}, {"post_id": 44684, "ts": "2026-08-10T16:42:14Z", "hours": 2.2806, "text": "Devlog 4 - StudyBuddy no new features today. just went hunting for stuff that was quietly broken, and there was way more of it than i expected the sign-in page could send u to a different website if someone handed u a link like /signin?next=someothersite.com , u would log in and then land on their page immediately after typing ur password, which is about the worst possible moment for that to happen this one went first there was no limit on login attempts i had limits on signing up and on uploading. somehow not on the actual password box so u could sit there and guess forever getting blocked now looks identical to just getting the password wrong. telling someone “too many attempts” quietly confirms the account exists file storage was writing into the void if one setting went missing it silently saved ur page images somewhere that doesnt survive on the server uploads said they worked. returned a success. images just gone nothing errored anywhere, which is why it sat there so long now it refuses to start up at all instead of pretending everything is fine i almost broke my whole test suite fixing something unrelated locked down two internal-only routes with what seemed like the obvious check except my tests run against a production build, so that check wouldve locked the tests out too caught it before it shipped, then wrote a test explaining it so future me doesnt helpfully undo it added security headers and instantly caught myself put them in report-only mode first so nothing could actually break about 40 seconds later it flagged a script that my own analytics loads the strict version wouldve blocked it in prod. i absolutely wouldve shipped that one fix i deleted instead of shipping had a note to add another check to the duplicate-question detector actually tested it against real papers first, and it turns out it can never trigger. the answers on a maths paper are just “4” and “9” and stuff, way too short for it to match on wouldve quietly made things worse all tests green at the end of it. onto the next pile"}, {"post_id": 44340, "ts": "2026-08-10T01:14:54Z", "hours": 6.0992, "text": "Devlog 3 - StudyBuddy wrote a script that reads each papers own answer key out of the source pdf and diffs it against my database. so the paper grades me instead of me grading myself. those 14 sheets scored 1 of 14 the first time i pointed it at them. tonight theyre 14 of 14 . barely any of it was the model. one paper stored 8 of its 15 questions. the model had read all 15 the log said dropped 6 unreadable question(s) . a count. no reason. it said that for two days made it print which field rejected the question and it told me on the first run: choices.0.label: Too big: expected string to have <=8 characters answer labels are capped at 8 chars, but the cap runs before the function that shortens them. that function only exists cuz the model returns A. 60 instead of A so the cap was checked against exactly the thing the transform was written to fix. coordinate geometry paper, every option reads A. (-2, 3) , ten chars, binned a count with no reason cant tell u “model returned garbage” from “ur schema is stricter than the paper” and those have opposite fixes also 44 duplicate-answer flags, every one wrong: -2 and 2 both normalised to 2 lol. on a maths paper the sign IS the question."}, {"post_id": 43025, "ts": "2026-08-08T02:19:09Z", "hours": 0.3111, "text": "if any of you guys wanna try this out here is the link: https://trystudybuddy.vercel.app/ YOOOOO WE GOT OUR FIRST FEW USERS i just checked before sleeping and yo we have 14 worksheets in the processing queue right now i wonder how much we had before THANK YOU GUYS"}, {"post_id": 42970, "ts": "2026-08-07T23:33:19Z", "hours": 5.2603, "text": "Devlog 2 - StudyBuddy HERE IS THE LINK TO TRY IT ( https://trystudybuddy.vercel.app/ ) left a pile of worksheets extracting overnight cuz i was sick of testing every fix against the same two papers. woke up to 9 worksheets, 713 questions, 353 pages everything below only shipped after i swept it over all of that first. rule i have now, after two earlier “fixes” that read perfectly and were wrong on real data a question that shipped reading ?rac{44}{11} i tell the model to write plain text. it writes LaTeX anyway sometimes that fails loudly. \\sqrt isnt a valid JSON escape so the response explodes and i lose a page. thats fine?? at least i know the other half is the problem. \\f is a form feed and \\t is a tab, both totally valid , so \\frac{44}{11} parses perfectly and quietly becomes a form feed followed by rac{44}{11} i had an AMC8 question in my database reading ?rac{44}{11} and nothing anywhere reported a problem fix has to run before the first parse , not in the catch block, cuz the version that actually hurts u never throws it doubles the backslash on letter runs JSON would misread, but only the six that collide (b f n r t u) and only when the run spells a real command. otherwise a real line break stops being a line break, which is a fun way to make things worse questions torn in half by the page break extraction reads one page at a time and never sees the page before or after. so a question ending at the bottom of page 3 with its answer choices at the top of page 4 is never whole in either request . five of them on the AMC8 paper one fix folds the halves back together. the other is for the worse case where the extractor returned nothing at all for the second half, cuz a bare block of answer choices isnt a question so the model just drops it. theyre still sitting in the next pages text layer tho, u just have to go get them sorting questions within a page needed its own module cuz the bounding boxes lie . question 4 came back with a top of 1428 and question 5 with 1379, so pure geometry puts them backwards AMC8 went from 19 of 25 questions having their answer choices to 24 of 25 , zero false positives across 348 SHSAT pages stuff that broke a worksheet told me it had 26 questions when the paper has 25 . the extra one was the axis labels off a diagram, and the SHSAT ones had rows that just said CONTINUE TO THE NEXT PAGE. dropped 23 rows, all page furniture then immediately shipped a followup bug where the card read “Questions 25” next to “Unchecked 26” cuz i filtered one count and forgot the other one lol tried just asking the model to return a carried answer block as half a question. produced zero of them and started relabelling stem-only questions as free response, which hides the damage from every check i have. reverted the landing page every animation was gated behind prefers-reduced-motion , which sounds responsible until u find out some managed windows installs ship with animation effects off by default . so the page whose whole job is showing the product working was showing a static screenshot the hero panel gets dealt onto the page like a card now. needs a perspective on the parent or the rotations collapse into a shear and it just looks like a slide the forgetting curve draws itself left to right. stroke-dashoffset does not work here , pathLength is silently ignored under vector-effect: non-scaling-stroke so the dash tiles across the path instead of spanning it once. and i need non-scaling-stroke or the line renders 9x too thick . used a page-coloured shutter instead next things: that one AMC8 question needs reading off the page image since the text layer doesnt have it. and theres a cheaper reduced-motion compromise i wrote down but havent built."}, {"post_id": 42187, "ts": "2026-08-06T20:02:11Z", "hours": 13.8281, "text": "Devlog 1 - StudyBuddy so ive been doing SHSAT practice tests for a while and the thing that always got me is that after i mark one, i have like 20 wrong answers and no idea what to actually do with that info . like ok i got 12 questions wrong, but am i bad at geometry or did i just misread three questions? no clue. so id end up redoing entire sections i was already fine at. basically what im building is a web app where u upload a worksheet or a practice test (pdf or even just a photo of the page) and it reads every question off it, figures out what topic each one is, and then after u mark which ones u got wrong it schedules them to come back later using FSRS (same spaced repetition algo anki uses). the thing that makes it diff from just writing ur mistakes in a notebook is that it tracks topics across every test u ever upload . one test says nothing. five tests and it can actually tell u “ur bad at ratios” with a straight face. the AI runs on my own laptop i did not want to pay for an api. so the vision model that reads the pages runs on my own rtx 5080 . it sits at home and asks the deployed site for jobs, and it only ever dials outward so theres no port open on my home network. if my laptops off, uploads just queue instead of dying. the part i was most wrong about i picked the model i was using (qwen2.5vl:7b) literally because it was the first one i pulled . thats the whole reason. so i finally benchmarked it properly, 9 models on a real 58 page shsat paper, 114 questions . the one i already had won?? the 27b model is 4x bigger, scored 6 points WORSE , and took 183 seconds per page vs 7.8 . id been assuming for weeks that upgrading would fix my accuracy problems lol. also the grading was free which i was way too happy about. every question number 1-114 shows up exactly once on the paper so the test just grades itself , i never labelled a single page by hand. the bug that was actually my fault so when i looked at WHICH questions got missed they werent random, they came in chunks . one model dropped 17 questions in a row . turns out every single miss on every model was a page that came back completely empty . not a wrong answer. nothing. and that was my bug not the models . an empty reply gives 0 questions and no error, so my checker (which only looked for gaps in question numbering) saw nothing wrong and the upload said success while a whole page just quietly disappeared . fixed with one retry at a slightly higher temperature cuz a model that decided to output nothing will decide that again if u ask it the exact same way. stuff that broke i wrote a check to catch questions that got cut off mid sentence (flag anything not ending in punctuation) and it flagged 25 out of 114 questions on a CLEAN run . all wrong. turns out shsat questions end with like “by” or “through” all the time and the answer choices finish the sentence. fixed it and it changed literally zero outcomes so the rule was doing nothing the whole time. also added rate limiting and instantly locked myself out of my own test suite , which signs up way more than 5 times an hour from localhost. also deleted my entire email system . u need a domain u own to send emails (spf/dkim records) and a free .vercel.app subdomain cant do that. so instead of buying a domain i deleted 274 lines and made google sign in the front door. next things: tier B uploads dont get topic tags yet, and theres one test failing on purpose cuz FSRS says a question u just got wrong is due in 1 minute but i think it should be due immediately. gotta pick one."}]...
|
Title: StudyBuddy by @Vedant_Daga | Stardance
Dev Title: StudyBuddy by @Vedant_Daga | Stardance
Devlogs:
Devlog 1 - StudyBuddy so ive been doing SHSAT practice tests for a while and the thing that always got me is that after i mark one, i have like 20 wrong answers and no idea what to actually do with that info . like ok i got 12 questions wrong, but am i bad at geometry or did i just misread three questions? no clue. so id end up redoing entire sections i was already fine at. basically what im building is a web app where u upload a worksheet or a practice test (pdf or even just a photo of the page) and it reads every question off it, figures out what topic each one is, and then after u mark which ones u got wrong it schedules them to come back later using FSRS (same spaced repetition algo anki uses). the thing that makes it diff from just writing ur mistakes in a notebook is that it tracks topics across every test u ever upload . one test says nothing. five tests and it can actually tell u “ur bad at ratios” with a straight face. the AI runs on my own laptop i did not want to pay for an api. so the vision model that reads the pages runs on my own rtx 5080 . it sits at home and asks the deployed site for jobs, and it only ever dials outward so theres no port open on my home network. if my laptops off, uploads just queue instead of dying. the part i was most wrong about i picked the model i was using (qwen2.5vl:7b) literally because it was the first one i pulled . thats the whole reason. so i finally benchmarked it properly, 9 models on a real 58 page shsat paper, 114 questions . the one i already had won?? the 27b model is 4x bigger, scored 6 points WORSE , and took 183 seconds per page vs 7.8 . id been assuming for weeks that upgrading would fix my accuracy problems lol. also the grading was free which i was way too happy about. every question number 1-114 shows up exactly once on the paper so the test just grades itself , i never labelled a single page by hand. the bug that was actually my fault so when i looked at WHICH questions got missed they werent random, they came in chunks . one model dropped 17 questions in a row . turns out every single miss on every model was a page that came back completely empty . not a wrong answer. nothing. and that was my bug not the models . an empty reply gives 0 questions and no error, so my checker (which only looked for gaps in question numbering) saw nothing wrong and the upload said success while a whole page just quietly disappeared . fixed with one retry at a slightly higher temperature cuz a model that decided to output nothing will decide that again if u ask it the exact same way. stuff that broke i wrote a check to catch questions that got cut off mid sentence (flag anything not ending in punctuation) and it flagged 25 out of 114 questions on a CLEAN run . all wrong. turns out shsat questions end with like “by” or “through” all the time and the answer choices finish the sentence. fixed it and it changed literally zero outcomes so the rule was doing nothing the whole time. also added rate limiting and instantly locked myself out of my own test suite , which signs up way more than 5 times an hour from localhost. also deleted my entire email system . u need a domain u own to send emails (spf/dkim records) and a free .vercel.app subdomain cant do that. so instead of buying a domain i deleted 274 lines and made google sign in the front door. next things: tier B uploads dont get topic tags yet, and theres one test failing on purpose cuz FSRS says a question u just got wrong is due in 1 minute but i think it should be due immediately. gotta pick one.
Devlog 2 - StudyBuddy HERE IS THE LINK TO TRY IT ( https://trystudybuddy.vercel.app/ ) left a pile of worksheets extracting overnight cuz i was sick of testing every fix against the same two papers. woke up to 9 worksheets, 713 questions, 353 pages everything below only shipped after i swept it over all of that first. rule i have now, after two earlier “fixes” that read perfectly and were wrong on real data a question that shipped reading ?rac{44}{11} i tell the model to write plain text. it writes LaTeX anyway sometimes that fails loudly. \sqrt isnt a valid JSON escape so the response explodes and i lose a page. thats fine?? at least i know the other half is the problem. \f is a form feed and \t is a tab, both totally valid , so \frac{44}{11} parses perfectly and quietly becomes a form feed followed by rac{44}{11} i had an AMC8 question in my database reading ?rac{44}{11} and nothing anywhere reported a problem fix has to run before the first parse , not in the catch block, cuz the version that actually hurts u never throws it doubles the backslash on letter runs JSON would misread, but only the six that collide (b f n r t u) and only when the run spells a real command. otherwise a real line break stops being a line break, which is a fun way to make things worse questions torn in half by the page break extraction reads one page at a time and never sees the page before or after. so a question ending at the bottom of page 3 with its answer choices at the top of page 4 is never whole in either request . five of them on the AMC8 paper one fix folds the halves back together. the other is for the worse case where the extractor returned nothing at all for the second half, cuz a bare block of answer choices isnt a question so the model just drops it. theyre still sitting in the next pages text layer tho, u just have to go get them sorting questions within a page needed its own module cuz the bounding boxes lie . question 4 came back with a top of 1428 and question 5 with 1379, so pure geometry puts them backwards AMC8 went from 19 of 25 questions having their answer choices to 24 of 25 , zero false positives across 348 SHSAT pages stuff that broke a worksheet told me it had 26 questions when the paper has 25 . the extra one was the axis labels off a diagram, and the SHSAT ones had rows that just said CONTINUE TO THE NEXT PAGE. dropped 23 rows, all page furniture then immediately shipped a followup bug where the card read “Questions 25” next to “Unchecked 26” cuz i filtered one count and forgot the other one lol tried just asking the model to return a carried answer block as half a question. produced zero of them and started relabelling stem-only questions as free response, which hides the damage from every check i have. reverted the landing page every animation was gated behind prefers-reduced-motion , which sounds responsible until u find out some managed windows installs ship with animation effects off by default . so the page whose whole job is showing the product working was showing a static screenshot the hero panel gets dealt onto the page like a card now. needs a perspective on the parent or the rotations collapse into a shear and it just looks like a slide the forgetting curve draws itself left to right. stroke-dashoffset does not work here , pathLength is silently ignored under vector-effect: non-scaling-stroke so the dash tiles across the path instead of spanning it once. and i need non-scaling-stroke or the line renders 9x too thick . used a page-coloured shutter instead next things: that one AMC8 question needs reading off the page image since the text layer doesnt have it. and theres a cheaper reduced-motion compromise i wrote down but havent built.
if any of you guys wanna try this out here is the link: https://trystudybuddy.vercel.app/ YOOOOO WE GOT OUR FIRST FEW USERS i just checked before sleeping and yo we have 14 worksheets in the processing queue right now i wonder how much we had before THANK YOU GUYS
Devlog 3 - StudyBuddy wrote a script that reads each papers own answer key out of the source pdf and diffs it against my database. so the paper grades me instead of me grading myself. those 14 sheets scored 1 of 14 the first time i pointed it at them. tonight theyre 14 of 14 . barely any of it was the model. one paper stored 8 of its 15 questions. the model had read all 15 the log said dropped 6 unreadable question(s) . a count. no reason. it said that for two days made it print which field rejected the question and it told me on the first run: choices.0.label: Too big: expected string to have <=8 characters answer labels are capped at 8 chars, but the cap runs before the function that shortens them. that function only exists cuz the model returns A. 60 instead of A so the cap was checked against exactly the thing the transform was written to fix. coordinate geometry paper, every option reads A. (-2, 3) , ten chars, binned a count with no reason cant tell u “model returned garbage” from “ur schema is stricter than the paper” and those have opposite fixes also 44 duplicate-answer flags, every one wrong: -2 and 2 both normalised to 2 lol. on a maths paper the sign IS the question.
Devlog 4 - StudyBuddy no new features today. just went hunting for stuff that was quietly broken, and there was way more of it than i expected the sign-in page could send u to a different website if someone handed u a link like /signin?next=someothersite.com , u would log in and then land on their page immediately after typing ur password, which is about the worst possible moment for that to happen this one went first there was no limit on login attempts i had limits on signing up and on uploading. somehow not on the actual password box so u could sit there and guess forever getting blocked now looks identical to just getting the password wrong. telling someone “too many attempts” quietly confirms the account exists file storage was writing into the void if one setting went missing it silently saved ur page images somewhere that doesnt survive on the server uploads said they worked. returned a success. images just gone nothing errored anywhere, which is why it sat there so long now it refuses to start up at all instead of pretending everything is fine i almost broke my whole test suite fixing something unrelated locked down two internal-only routes with what seemed like the obvious check except my tests run against a production build, so that check wouldve locked the tests out too caught it before it shipped, then wrote a test explaining it so future me doesnt helpfully undo it added security headers and instantly caught myself put them in report-only mode first so nothing could actually break about 40 seconds later it flagged a script that my own analytics loads the strict version wouldve blocked it in prod. i absolutely wouldve shipped that one fix i deleted instead of shipping had a note to add another check to the duplicate-question detector actually tested it against real papers first, and it turns out it can never trigger. the answers on a maths paper are just “4” and “9” and stuff, way too short for it to match on wouldve quietly made things worse all tests green at the end of it. onto the next pile
Devlog 5 - StudyBuddy “accept the remaining 114” checked none of them that button fires one save per question, and on my test paper thats 114 of them at once nothing read the answers back, so a save that failed looked exactly like one that worked the tick stayed on, u moved to the next screen, and it was never stored deleting a question said “Saved” and then didnt delete it delete waits a few seconds so u can undo it. it dropped the question from the list first and threw away whatever came back from the server so if it failed u got told it saved, and the question showed up in ur study queue later like nothing happened also there was no undo button anywhere. it was just a slow delete $5 was being eaten maths sometimes comes wrapped in dollar signs so i strip them off. money also comes wrapped in dollar signs “Sam has $5 and Ana has $12” was being read as “Sam has 5 and Ana has 12” checked a real saved question and yep. paper says $5, database said 5 if my worker died, ur worksheet said “queued” forever the machine that reads the pages runs at my house. if it fell over mid job, nothing anywhere ever marked that job as failed it just sat there, and the free credit it charged u never came back the topic tagging could fail without failing it needs a bit of software thats not always there on the server. when it wasnt, it came back with “no matches” which is a completely normal answer. so the job finished, every question was untagged, ur weak areas page was empty, and nothing anywhere was an error one i was told to do and didnt had a note to cap the page number by how many pages the worksheet has except if u upload pages 10 to 15 of a pdf thats six pages numbered 10 to 15, so that check refuses every single one of them capped the two things separately instead also the screen asking u to check questions against the page never showed the page finishing a review session stopped saying u finished it the AI could print its own error onto ur status page, which sometimes meant quoting ur own worksheet back at u the upload checked the image size by asking the browser instead of opening the image
Devlog 6 - StudyBuddy u can throw everything u got wrong into blooket now button on the dashboard for the whole account, and one per worksheet if u only want that paper it gives u a file, u upload it to blooket, u get a set of exactly the questions u missed wrong means ever wrong, not currently wrong. if u got it wrong on paper and then right in review, its still in there. thats the one u actually want to drill and it wouldve been weird to leave out blooket hands u an .xlsx template so everyone calls this an xlsx export, but its uploader only accepts csv. took a while to work out also its importer just silently imports nothing if the file is slightly off. no error, no warning, zero questions. three separate ways to trip that picking a subject barely did anything theres a dropdown on upload for what subject the worksheet is. it offers things like “Algebra 1” only the first bit of that was ever used, so picking Algebra 1 searched all of high school maths. exactly the same as picking “all of high school maths” the one control u have over how ur questions get sorted, doing basically nothing long papers were quietly losing questions to a limit the topic tagger takes questions 100 at a time. fine except it grabbed 100 in no particular order and then removed the ones already done, so on a 114 question paper 14 never got looked at, and which 14 was down to whatever the database felt like that day worse on a second pass: if 100 were already tagged it handed back an empty list, which reads as “nothing left to do”, and the rest never got tagged at all two screens counting the same paper differently the worksheets page filters out page junk like “CONTINUE TO THE NEXT PAGE” before counting. the dashboard didnt so the same worksheet was 25 questions on one screen and 26 on the other, and nothing tells u which one is lying the chart was lying about time the accuracy chart draws a bar per week. it was only making bars for weeks u actually did something in so 12 bars looked like 12 weeks in a row but werent. practise in march and again in june and u see two bars side by side like it was steady every week is a bar now, empty ones included, and it says which weeks its showing scrolling changed my settings without me touching anything the page range and question count boxes were number inputs, and number inputs treat the scroll wheel as a way to change the value so scrolling down the upload page with ur cursor over one of them silently rewrote which pages get read found a pile of other accessibility stuff while i was in there: buttons a bit too small to reliably hit on a phone, cards that vanish in high contrast mode, and a “skip to content” link that didnt actually skip anything also asking to see an explanation u already had was using up ur hourly limit for generating new ones the topic picker was built in a way that made screen readers think the list had nothing in it button labels were half Title Case and half sentence case, sometimes on the same screen
Devlog 7 - StudyBuddy the drag box was broken in the real app. for months u upload a worksheet, u draw a box around question 1, it fills in. thats the whole manual editor, thats the whole free tier. and it didnt work. click through the app to get there and nothing responds. reload and its fine. four previous commits went looking for this. the test had a 24 line comment explaining why it was probably a test problem. it was not. elementFromPoint(100, 28) -> HTML elementsFromPoint(100, 28) -> [HTML] thats the browser saying nothing is at this pixel , for every pixel on the page. the cause was 8 view transition animations, 6 stuck running forever . one that never finishes sits in the top layer and covers everything. and its a pseudo element so it shows up in no ancestor walk and no element stack, which is why every previous investigation contradicted itself. bisected on clean builds: next flag react component result on on broken off on broken on off clean off off clean so its react’s <ViewTransition> , not next. three lines of css. the drag test used to fake the mouse with dispatched events, now it uses a real one, which is the only thing that proves anything. gemini has never completed a single request 4 providers in settings. one says “has a free tier worth starting on”. zero successful calls, ever. every nullable field is anyOf: [{type:'x'}, {type:'null'}] gemini doesnt understand anyOf , so a filter strips keywords it rejects the filter dropped anyOf and left {} behind, while leaving the field in required a required field with no type = rejected request. every time funny part: the allowlist already had nullable in it, gemini’s own word for the same idea. someone knew. nothing connected them. the landing page was lying about 3 of its 4 topics theres a comment above them saying “kept honest on purpose: these are real taxonomy names” . Ratio & proportion - not real Linear equations - not real Reading inference - not real Vocabulary in context - real so the one claim the page made about its own honesty was the false one lol. theres a test now instead of a comment. tests found 2 bugs i wasnt looking for new Date("sometime in 2010") returns jan 1 2010, cuz v8 scrapes a year out of almost anything. and it parses as local midnight while everything next to it is UTC. on a 13th birthday thats the whole question one route answered 404 to someone with no session. the client sends u to sign in on a 401 and brings u back after, so a tab that sat open till the session expired just ate what u typed the rest a reload could cost u a 114 question paper. markup saves nothing till every question is marked, so its a local draft now / , /signin , /signup are static html now. the topbar called auth() from the root layout, which made all 39 routes render per request the 23mb embedding model was getting fetched inside a background task on every cold start, and failing silently one commit recorded 32 renames and none of the code . the git add failed and i’d redirected the error away so i never saw it
Devlog 8 - StudyBuddy im too lazy to have a full write up for this (watched spiderman tdy IT WAS REALLY GOOD) for each topic that a user gets wrong, a seperate model (gpt-oss:20b, sorry if i miswrote the model) gives a walkthrough of the topic also added missed questions to the csv export added a AI answer key system if the worksheet doesnt have one.
Devlog 9 - StudyBuddy the merge tool could double up a question number renumbering the survivor of a duplicate pair used Math.min of just those two rows, blind to the rest of the paper merging a phantom #5 into a real #9 could hand the paper a second #5, the exact thing the tool exists to prevent zero tests on a function that deletes rows. five now, including the repro $15/hour was losing its sign, not just $5 the math-stripper runs from one $ to the next, so “earns $15/hour and $18/hour” reads the slash as a fraction and eats both signs. same with $40 = $25 + $15 on the = i wrote this down once as “one weird case.” it’s the whole unit-rate and equation category fix checks the char after the closing $ : a digit means it’s opening the next price, not real math figure crops didnt need a new pipeline, just reusing one filed as “never produced,” which reads like crop, store, backfill the verify screen already computes a crop window from the bbox over the stored page image. review got wired to the same math, every old worksheet gets it free the real work was the guards: zero-area, inverted, off-page, or no recorded page size all have to degrade to nothing rather than to the wrong crop a fence i built to be un-escapable, wasnt the comment says a new tag can’t be added without going through the escaping. page-seam work added two by typing them directly a page whose OCR contains the literal closing tag closes the fence early, and everything after reads as instructions instead of data tag list exists once now, every fence built from it every worksheets.status write was a bare UPDATE no guard on the current value, so a stale job retry could drag an already-reviewed worksheet back to failed one transitionWorksheet(from, to) now, every write through it preview deploys were migrating the prod database guard only checked VERCEL_ENV === 'production' , but previews fire on every push against one shared DATABASE_URL two finishing together were racing through the migration folder 9 tests could go quiet and nobody would know one e2e file, 12 tests serial in a single tab, everything past “verify” depending on a question a drag gesture created three tests earlier a drag regression silently skipped 9 unrelated tests instead of failing them api fixture, split the file, broke the drag on purpose to prove it. held the question list rendered all 114 cards for a screen that edits one at a time deferred a while back: virtualizing editable rows risks one unmounting mid-edit only one card can ever be expanded, so the risk surface is exactly one row virtualizes past 40 now, open row pinned into the rendered range wherever scrolling goes. typed into one at 60 questions, scrolled thousands of px away, still there, still focused, still holding the edit also profile save had devlog 4’s router.refresh() remount bug login rate limit skipped Auth.js’s own credentials endpoint ollama worker had no startup timeout and just hung worksheet text leaked into console logs on schema rejections review screen shipped every page’s OCR text on page-1 load admin console got merge, tree edit, queue, usage doc-count drift (third time), and a false-positive LaTeX check flagging real set notation as broken math
Devlog 10 - StudyBuddy mostly the same bug wearing different clothes: a screen that exists, that u can get to, that quietly does less than it says tier C was sitting in settings doing nothing save an ollama address and the app resolves u to a browser executor. that executor had nowhere to go, so ur worksheet just sat there looking queued it claims the job now and reads each page against localhost:11434 , posting back through the same queue my gpu posts through has to run in the browser cuz a server cant reach ur localhost, so the tab stays open. checkpointed per page tho, closing it resumes instead of restarting the paper a mark u mis-tapped was permanent tap through 40 of these and ur going to hit the wrong one eventually that one tap feeds the FSRS schedule, the topic accuracy, the weakness ranking and the blooket export only way back was deleting the worksheet and uploading it again, which costs u a trial credit. so the fix for a mistap was paying for it two defences that were never on WORKER_ALLOWED_IPS was optional and empty meant no restriction empty is the state every deployment starts in, so the normal outcome was a defence thats off that nobody ever decided to turn off refused now. * still allows any address but somebody has to type it untagged worksheets looked identical to broken ones tier B cant auto-classify, the embedding model needs a native runtime the serverless host doesnt have so ur questions saved fine and were reviewable fine, they just had no topic and nothing said why. reads exactly like it silently failed every tier that can come back untagged says so now nothing told u when a worksheet finished u uploaded and then u guessed. sat on the status page or came back later and hoped in-app bell that needs zero setup, plus web push for a tab u closed also “Review these now” now reviews those questions. the word had drifted onto three screens meaning three different things dashboard was missing three of its panels, and the trend arrow was specified ages ago and never computed taxonomy had no front door and the subject panel only went one level deep. Math > Geometry > Triangles walks now pagination was capping at the fiftieth worksheet and saying nothing about it the AI setup prompt showed up after ur trial ran out, which is the one moment it cant help u grouped scripts/ by what it does to ur data. inspect/ reads, repair/ writes behind a guard, benchmark/ measures 1285 tests green. playwright hasnt run yet and app/ moved a lot this time, so thats next
Devlog 11 - StudyBuddy this is a short one got the google sign in to work added email verification and forgot ur password thing cleaned up the overall UI made the topic tree standardized cleaned up some of the extraction issues added ollama integration for everyone added practice question generation, topic overview, etc tested everything fully the attached image is the app after a ton of testing *
ANYONE RATING THIS PROJECT - THE VIDEO ON THE SHIP IS OUTDATED, THERE IS ALSO ANOTHER FEW DEVLOGS SO CHECK THAT OUT BEFORE JUDGING BECAUSE IT GIVES MORE INFO ABOUT THE BUILDING AND WHY THE CHANGED A LOT SORRYYYY ALSO USE THE SAMPLE WORKSHEETS I ATTACHED OR EASILY PARSEABLE WORKSHEETS. TEMPORAILY IVE CLOSED THE API KEY VERSION AS MOST PEOPLE DONT HAVE THEM. COMPLEX WORKSHEETS ARE TO BE USED ONLY WITH LARGE LLM Devlog 12 - StudyBuddy got everything ready to ship turns out that ollama needed some permissions so fixed that and added it to readme for people to set up, and other stuff like that shipping it in 5 mins 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉 🎉
Devlog 13 - StudyBuddy update the ui to make it look liek sticky notes and lined paper
Devlog 14 shipwrights rejected the project so im fixing their things decided to clean up the code, get rid of old functions, and i also cleaned up the UI because no one really needs the heading and then what it means, like i think you know that topics means topics and doesnt need a whole sentence after that. cleaned up the repo, got rid of ai generated code fixed a 500 error when uploading worksheets, cuz something happened and some linux kernel wasnt compaitble with the library i was using wrapped up my last few fixes lowk not a lot of new features, rather like fixes
Devlog 15 more cleaninggggggg cleaned up repo, removed more dead logic and stuff instead of a css wallpaper, i added a image of lined paper to really give that school/learning feel asked ai to help me get the ui to look kinda fresh and add the pencil style heading
Devlog 16 - StudyBuddy added some sample worksheets so you can try it out added the borders back to the buttons because i accidently removed them before
Devlog 17 - StudyBuddy (ah im losing track of these devlogs uh my ship keeps getting rejected for look to AI, and ive literally rebuilt everything, removed all teh ai generated thing. (im gonna ship again rn) made a logo cuz i thought it would look cool added a Terms of Services page cuz its risky cuz people could upload worksheets they dont have access for an i could be fried so i made them agree to that cleaned up more code fixed a few more bugs
Devlog 18 - StudyBuddy lowk not a lot of content in this one but like 1000000 different bugs popped up and reviewers are pointing it out so thank you smmm ( @blowupthenoobs ur the goat) fixed the trials having no limit other fixes just check my commits
Devlog 19 - StudyBuddy even more bug fixes so i pushed a change, and that somehow broke the entire pipeline so i patched it no real content just fixes going to add API key integration soon (follow to see it happen)
Devlog 20 - StudyBuddy more bug fixes continous reships (they keep saying its too AI generated even after i rebuilt the UI) started working on the API key integration (like almost there rn) tons of dead code removal and code clean up added support for firefox too (now it works on edge, firefox, chrome, and prolly a ton others i just havent really tested it)
Devlog 21 - StudyBuddy patched even more bugs rewrote tons of my code (ai to human) cleaned up old files (a lot of old features were removed and reupdated) just more QoL fixes
Devlog 22 - StudyBuddy fixed more bugs and rewrote code by hand
Devlog 23 - StudyBuddy i just had some minutes left on this so im just making the devlog still waiting for my ship to be approved (been waiting a few days) no big changes at all (waiting for feedback)
Devlog 24: StudyBuddy so a lot of the feedback said “cool but it needs ur gpu on”. that made it seem like a PoC, so now its running on the free tier of openrouter. making the free tier work one request per question was never going to fit a daily cap. extraction now sends up to 10 pages / 25 questions per call, sorting and answer key go 10 questions at a time. ~4 requests per worksheet instead of ~42 the homepage and upload page count the day’s calls. 80% says busy, 100% stops reading and points u at the samples. samples upload page leads with the three samples as one-click cards; ur own pdf is the second option and says how much of the shared allowance is used. removed phone photo uploads (highly innaccurate on the free tier of models i have)
Ships:
StudyBuddy Turn the worksheets you have already done into a record of what you actually know. Try it: https://trystudybuddy.vercel.app Code: https://github.com/DagaVedant/StudyBuddy What I made Upload a worksheet you already finished, as a PDF or photos. A vision model pulls out every question, its options and its answer key. You mark what you got wrong. That is the only input it needs. It sorts questions into 87 topics across SAT and competition maths. Then it ranks your weak areas and schedules revision using FSRS, the algorithm behind Anki. It also writes practice questions on your weak topics and exports misses to Blooket. Built on my own past papers: 387 real questions from 22 worksheets. What was challenging The models can run in four places: my GPU, your API key, your own Ollama, or not at all. A student with a GPU should never send homework to my server. A student with nothing should still get something. Topic tagging needs an embedding model that serverless hosting cannot run. So the shortlist is a pgvector query on the server and the vector is computed anywhere, including in your browser under WebAssembly. Worst bug was three characters: I stored the global fetch on a class field, which passes the object as the receiver. Node allows it, browsers throw Illegal invocation. Every test passed and the only runtime that mattered was broken. What I am proud of It does not lie to you. Weak topics are ranked by a Wilson lower bound, not a raw percentage, so two unlucky answers cannot fake a weakness. Model-written questions are kept out of your accuracy, so the ranking cannot feed the questions it generates. Every model response is schema-checked before it reaches the database. Generated practice is sifted against thirteen specific failure modes. When my GPU is off, the upload screen says so instead of spinning. 1,459 unit tests, 84 end to end, 293 commits. How to test it Sign in with Google, or an email and password. Upload any worksheet you have already done. A past paper works well. Check what it read. Each question sits beside the page image it came from. Mark what you missed, then open the dashboard. The free trial reads three worksheets on my own GPU. If it is off, your upload queues and the app tells you. To skip the wait, settings takes your own API key or connects to Ollama on your machine. guys i wish this was markdown compatible but its not so sorry
StudyBuddy - https://trystudybuddy.vercel.app fyi before u try it: reading runs on a free model with a shared daily cap, and ship day is way more traffic than a normal day. please use the sample worksheets wherever u can (they’re the first thing on the upload page, one click) and upload at most one of ur own pdfs for the next day or two. if the homepage says the free reads are used up, the samples still work. what it does upload a worksheet pdf. it reads every question off the page, tags each one by topic, and works out the answer key. u mark which ones u got wrong and it brings them back on an FSRS schedule (the algo anki uses). across every test u upload it turns “i got 12 wrong” into “ur bad at ratios”. what changed since last time runs on openrouter’s free tier instead of my gpu. not a proof of concept anymore one worksheet is ~4 requests instead of ~42. pages are read in groups the site says when the day’s free reads are running low. clear about the trial: 3 worksheets free, then still free, u just add questions by hand or plug in ur own key. what was hard free models reason before they answer and bill that against the output limit which ends up causing an error, but its really hard to figure out the embedding-only shortcut for sorting looked fine and was wrong a third of the time so fixed it...
|
1793054929.91747
|
1793141329.91747
|
|
47955
|
Hobby Farm Tracker by @prnjl | Stardance
|
prnjl
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Hobby Farm Tracker by @prnjl | Stardance
|
1792536530.2395525
|
1793141330.2395525
|
|
43117
|
My own site! by @RChris | Stardance
|
RChris
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @RChris | Stardance
|
1792536531.0580552
|
1793141331.0580552
|
|
47956
|
My first slack bot! by @zoel | Stardance
|
zoel
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My first slack bot! by @zoel | Stardance
|
1792536531.8924987
|
1793141331.8924987
|
|
47957
|
My own site! by @snowwy7 | Stardance
|
snowwy7
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @snowwy7 | Stardance
|
1792536532.7459543
|
1793141332.7459543
|
|
47959
|
Keyboard by @tameemq10 | Stardance
|
tameemq10
|
0
|
2.27
|
0
|
[]
|
[{"post_id": 47277, "ts": "202 [{"post_id": 47277, "ts": "2026-08-15T03:23:54Z", "hours": 2.2708, "text": "Working on the Keyboard schematic and learning KiCad"}]...
|
Title: Keyboard by @tameemq10 | Stardance
Devlogs Title: Keyboard by @tameemq10 | Stardance
Devlogs:
Working on the Keyboard schematic and learning KiCad...
|
1792536533.6305513
|
1793141333.6305513
|
|
43121
|
AnyPocket by @UnLuckyDev | Stardance
|
UnLuckyDev
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: AnyPocket by @UnLuckyDev | Stardance
|
1792536534.5192177
|
1793141334.5192177
|
|
49577
|
CSGame by @potipek | Stardance
|
potipek
|
1
|
2.79
|
3
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-16T21:54:10Z", "hours": 2.0, "multiplier": 1.09, "payout": 3, "blessing": "neutral", "text": "I made my probably second game in csharp, I am a newbie, hope you like it and have a great day! :)", "repo": "https://github.com/tomk1440-cmyk/CSGame", "demo": "https://github.com/tomk1440-cmyk/CSGame/releases/tag/alpha5"}]...
|
[{"post_id": 51596, "ts": "202 [{"post_id": 51596, "ts": "2026-08-21T11:18:02Z", "hours": 0.4814, "text": "Fixed incorrect input so it no longer crashes you need to have dotnet 10 installed to run the game!"}, {"post_id": 48986, "ts": "2026-08-17T15:59:22Z", "hours": 0.3133, "text": "added new difficulty"}, {"post_id": 48508, "ts": "2026-08-16T21:52:20Z", "hours": 2.4808, "text": "Code looks good, code looks great! + github releases :)"}]...
|
Title: CSGame by @potipek | Stardance
Devlogs:
Co Title: CSGame by @potipek | Stardance
Devlogs:
Code looks good, code looks great! + github releases :)
added new difficulty
Fixed incorrect input so it no longer crashes you need to have dotnet 10 installed to run the game!
Ships:
I made my probably second game in csharp, I am a newbie, hope you like it and have a great day! :)...
|
1793054935.3704233
|
1793141335.3704233
|
|
27798
|
Word Embeddings by @stockifab | Stardance
|
stockifab
|
1
|
28.0
|
556
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-25T19:47:36Z", "hours": 28.0, "multiplier": 16.45, "payout": 556, "blessing": "neutral", "text": "Word embeddings are a way to store the meaning of word (such as “plane” or “dog”) in a large vector (= a long list of numbers) These vectors can then be used to find words similar to each other. But they can also be used to calculate with English words, e.g.: dog - bark + meow –> cat (in fact, you can try this very example on the demo website, or come up with your own calculation) In order to retrieve these embeddings, I created a model that reads through billions of words to understand how they are used. It looks at the words appearing close to each other and assumes all words with the same nearby words must have similar meaning. This retrieval of the embeddings was the hardest part: My first model was okayish and could find related words, but I could not yet calculate with them like in the example before. For the final version I used a much larger dataset, with thought-out pre-processing steps, which was more complicated then I thought (You need to ensure the words you are grouping actually belong together, so you may only group within individual sentences, groups mustn’t overlap anything inside brackets, and you can’t make a group with words you filtered in pre-processing at the same time you shouldn’t skip any words, …) Additionally the challenge with a larger dataset was, that it didnt fit into my memory, so I had to read it in chunks and train the model incrementally. The training of the final model took over 50 hours.", "repo": "https://github.com/stockifab/word-embeddings", "demo": "https://word-embeddings.happierbit.com/"}]...
|
[{"post_id": 34783, "ts": "202 [{"post_id": 34783, "ts": "2026-07-25T19:30:48Z", "hours": 1.7033, "text": "Finish Demo Website (Pages 4-8) I completed the last part of the demo website including the most exciting part about the word arithmetic."}, {"post_id": 33127, "ts": "2026-07-22T19:08:07Z", "hours": 4.3458, "text": "Embedding Demo Website (Pages 1-3) I really like the way the embeddings turned out. That’s why I want to make a website to make word embeddings as accessible and understandable as possible. I’m assuming no prior knowledge from the visitors, and try to interactively guide them through the world of embeddings, with each slide explaining something about embeddings or being interactive to try it yourself. This time i finished slides 1-3, with the last one being the interactive one. Since it should feel engaging and alive, I focus a lot on subtle animations and micro-interactions. I’ve never built a website with heavy animations before so this is the perfect opportunity to try GSAP!"}, {"post_id": 27814, "ts": "2026-07-13T18:14:42Z", "hours": 3.6242, "text": "Maths with English words With the new dataset, training took a lot longer. My computer worked for around 50 hours to run through 26GB of training data. The long wait really payed off though, the model is so much better than the previous model and it is finally capable of doing the embedding arithmetic I’ve been chasing the whole time. Embedding arithmetic is so fun, here are some examples: throw - throwing + running -> run (-ing form) better - good + friendly -> friendlier (comparasion) woman - man + king -> queen (man compared to woman is like king compared to queen) germany - berlin + paris (capitals) The model learned a lot more syntactic and semantic meaning than I had expected. Next I want to build a web app, so that you can play with the embeddings yourself."}, {"post_id": 23582, "ts": "2026-07-06T16:54:41Z", "hours": 7.0792, "text": "New Dataset + Improved Pre-Processing In an effort to increase the model’s performance I switched from the previous model’s Wikipedia Simple English dataset to a subset of the Fine Web Edu dataset. As an additional measure to improve the results I decided to use a larger context of 4 words left and right to the root word. I also completely re-wrote all the preprocessing steps. Even though the dataset is high-quality, language is very nuanced and needs filtering. But since words next to each other (4 words before and after the root word) get grouped, filtering an entire word means the group mustn’t be formed (as information is now missing), on the other hand removing punctuation from the end of a word should still allow that word to appear in a group. Overall I filter/handle: quotes brackets non-English Characters apostrophes other special characters (dashes, underscores, etc.) Another challenge is ensuring that grouped words actually belong together. In the previous dataset I simply grouped the words next to each other in a giant blob of text. This time I only group words from the same text source (the same article, document, …) and only within the sentences of that source. This ensures groups don’t span multiple sentences. This taught me a lot about working with larger amounts of data - I couldn’t load everything in memory as it would be too large, but had to read from disk in batches to process the data. After ~50 min of leaving my computer untouched I had the final dataset with ~26GB (~18GB compressed using word IDs) of filtered word groups. Next, I will have to find a way to determine unrelated words, so that I can start training the third iteration of the model."}, {"post_id": 22251, "ts": "2026-07-04T16:59:44Z", "hours": 3.2306, "text": "New (worse) model In an effort to improve on the previous model, I created a new one. Now it uses separate weights for the context instead of re-using the embedding weights in the context. The new model has 30.000.000 parameters which is double the previous one. Yet unfortunately, the results I got were disappointingly miserable: In contrast to the previous model, it doesn’t even group related words. According to the embeddings, the word “cat” is very similar in meaning to “motor” or “caution” 😂😭 I don’t know why it’s performing so poorly, but I’m curious to find out."}, {"post_id": 22092, "ts": "2026-07-04T10:56:19Z", "hours": 4.3497, "text": "First Embedding Model Using the data obtained previously I could get my first embeddings 🎉 The model (image) has 15.000.000 parameters and took roughly 1/2 hour to train. Unfortunately, the performance is below my expectations: It’s not yet good enough so that “uncle - aunt + mum” would output “dad”. However, the embeddings definitely captured some meaning: For example, the vector of “android” is close to “ios” and to “smartphones”. The vector of “cat” is close to the words “goat”, “monkeys” and “snakes”. I want to improve this model significantly until it’s good enough to meaningfully calculate with the embedding vectors."}, {"post_id": 17825, "ts": "2026-06-28T19:15:17Z", "hours": 3.9069, "text": "Data preprocessing Before the model can train to retrieve the embeddings, it needs data. I found a dataset on Kaggle with the text of 249.396 wikipedia articles. Today I did some preprocessing, first I removed any non-english words and delete special characters, then I determined the 50.000 most frequent words, and limited my vocabulary to these words. To compute the embeddings, I took the left and right words of each word in the data and put them into a pandas data frame along with two other unrelated words: (left word, center word, right word, unrelated word 1, unrelated word 2) The final dataset has 24.780.670 rows, so I likely cant train on the full dataset on my computer. The goal is for the model, when presented with the center word to predict which of the other words are similar to it which it can only do by learning the meaning of each word - which is what we want."}]...
|
Title: Word Embeddings by @stockifab | Stardance
Title: Word Embeddings by @stockifab | Stardance
Devlogs:
Data preprocessing Before the model can train to retrieve the embeddings, it needs data. I found a dataset on Kaggle with the text of 249.396 wikipedia articles. Today I did some preprocessing, first I removed any non-english words and delete special characters, then I determined the 50.000 most frequent words, and limited my vocabulary to these words. To compute the embeddings, I took the left and right words of each word in the data and put them into a pandas data frame along with two other unrelated words: (left word, center word, right word, unrelated word 1, unrelated word 2) The final dataset has 24.780.670 rows, so I likely cant train on the full dataset on my computer. The goal is for the model, when presented with the center word to predict which of the other words are similar to it which it can only do by learning the meaning of each word - which is what we want.
First Embedding Model Using the data obtained previously I could get my first embeddings 🎉 The model (image) has 15.000.000 parameters and took roughly 1/2 hour to train. Unfortunately, the performance is below my expectations: It’s not yet good enough so that “uncle - aunt + mum” would output “dad”. However, the embeddings definitely captured some meaning: For example, the vector of “android” is close to “ios” and to “smartphones”. The vector of “cat” is close to the words “goat”, “monkeys” and “snakes”. I want to improve this model significantly until it’s good enough to meaningfully calculate with the embedding vectors.
New (worse) model In an effort to improve on the previous model, I created a new one. Now it uses separate weights for the context instead of re-using the embedding weights in the context. The new model has 30.000.000 parameters which is double the previous one. Yet unfortunately, the results I got were disappointingly miserable: In contrast to the previous model, it doesn’t even group related words. According to the embeddings, the word “cat” is very similar in meaning to “motor” or “caution” 😂😭 I don’t know why it’s performing so poorly, but I’m curious to find out.
New Dataset + Improved Pre-Processing In an effort to increase the model’s performance I switched from the previous model’s Wikipedia Simple English dataset to a subset of the Fine Web Edu dataset. As an additional measure to improve the results I decided to use a larger context of 4 words left and right to the root word. I also completely re-wrote all the preprocessing steps. Even though the dataset is high-quality, language is very nuanced and needs filtering. But since words next to each other (4 words before and after the root word) get grouped, filtering an entire word means the group mustn’t be formed (as information is now missing), on the other hand removing punctuation from the end of a word should still allow that word to appear in a group. Overall I filter/handle: quotes brackets non-English Characters apostrophes other special characters (dashes, underscores, etc.) Another challenge is ensuring that grouped words actually belong together. In the previous dataset I simply grouped the words next to each other in a giant blob of text. This time I only group words from the same text source (the same article, document, …) and only within the sentences of that source. This ensures groups don’t span multiple sentences. This taught me a lot about working with larger amounts of data - I couldn’t load everything in memory as it would be too large, but had to read from disk in batches to process the data. After ~50 min of leaving my computer untouched I had the final dataset with ~26GB (~18GB compressed using word IDs) of filtered word groups. Next, I will have to find a way to determine unrelated words, so that I can start training the third iteration of the model.
Maths with English words With the new dataset, training took a lot longer. My computer worked for around 50 hours to run through 26GB of training data. The long wait really payed off though, the model is so much better than the previous model and it is finally capable of doing the embedding arithmetic I’ve been chasing the whole time. Embedding arithmetic is so fun, here are some examples: throw - throwing + running -> run (-ing form) better - good + friendly -> friendlier (comparasion) woman - man + king -> queen (man compared to woman is like king compared to queen) germany - berlin + paris (capitals) The model learned a lot more syntactic and semantic meaning than I had expected. Next I want to build a web app, so that you can play with the embeddings yourself.
Embedding Demo Website (Pages 1-3) I really like the way the embeddings turned out. That’s why I want to make a website to make word embeddings as accessible and understandable as possible. I’m assuming no prior knowledge from the visitors, and try to interactively guide them through the world of embeddings, with each slide explaining something about embeddings or being interactive to try it yourself. This time i finished slides 1-3, with the last one being the interactive one. Since it should feel engaging and alive, I focus a lot on subtle animations and micro-interactions. I’ve never built a website with heavy animations before so this is the perfect opportunity to try GSAP!
Finish Demo Website (Pages 4-8) I completed the last part of the demo website including the most exciting part about the word arithmetic.
Ships:
Word embeddings are a way to store the meaning of word (such as “plane” or “dog”) in a large vector (= a long list of numbers) These vectors can then be used to find words similar to each other. But they can also be used to calculate with English words, e.g.: dog - bark + meow –> cat (in fact, you can try this very example on the demo website, or come up with your own calculation) In order to retrieve these embeddings, I created a model that reads through billions of words to understand how they are used. It looks at the words appearing close to each other and assumes all words with the same nearby words must have similar meaning. This retrieval of the embeddings was the hardest part: My first model was okayish and could find related words, but I could not yet calculate with them like in the example before. For the final version I used a much larger dataset, with thought-out pre-processing steps, which was more complicated then I thought (You need to ensure the words you are grouping actually belong together, so you may only group within individual sentences, groups mustn’t overlap anything inside brackets, and you can’t make a group with words you filtered in pre-processing at the same time you shouldn’t skip any words, …) Additionally the challenge with a larger dataset was, that it didnt fit into my memory, so I had to read it in chunks and train the model incrementally. The training of the final model took over 50 hours....
|
1793054937.0950074
|
1793141337.0950074
|
|
47960
|
novea by @roy | Stardance
|
roy
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: novea by @roy | Stardance
|
1792536538.1924279
|
1793141338.1924279
|
|
43122
|
Meta-Ranks by @Justingo0 | Stardance
|
Justingo0
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Meta-Ranks by @Justingo0 | Stardance
|
1792536539.0182362
|
1793141339.0182362
|
|
47962
|
linux mass installer by @blenderuploads | Stardanc linux mass installer by @blenderuploads | Stardance...
|
blenderuploads
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: linux mass installer by @blenderuploads | S Title: linux mass installer by @blenderuploads | Stardance...
|
1792536539.8504384
|
1793141339.8504384
|
|
4881
|
Media Review Webpage by @nic | Stardance
|
nic
|
1
|
5.0
|
41
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-24T01:00:17Z", "hours": 5.0, "multiplier": 8.68, "payout": 41, "blessing": "neutral", "text": "A small webpage built with HTML, CSS, and a speck of JavaScript for my personal TV show/movie anime reviews! Inspired by old website aesthetics from the y2k era. Presented like a personal blog, and used to track my currently watched/watching shows as well as occasionally sharing my thoughts about recently finished movies. [created in mind with the indie web movement on neocities]", "repo": "https://github.com/sodahaunted/sodahaunt.reviews", "demo": "https://sodahaunt.neocities.org/reviews"}]...
|
[{"post_id": 33196, "ts": "202 [{"post_id": 33196, "ts": "2026-07-22T21:44:56Z", "hours": 1.7128, "text": "Media Review Webpage #3 After a long time procrastinating, I’m finally done with the concept/prototype of my webpage. I wrote one full review for a recent movie I watched (Obsession), formatted it, added photos, and made sure the two lines of JavaScript code work properly. Not sure how to add more pages, though. I’ll figure that out for a future update (though if you know how, please lmk) The fundamentals of this page are pretty much finished! It has a watchlist which I can use to track shows/movies I’m watching, a (mostly) responsive layout, and all the CSS features I intended to add. Unfortunately lost an hour or two here and there because I forgot to unpause my recording, but oh well. The GIT repo for this page unfortunately doesn’t have many commits, since I wasn’t using GitHub to make this and was pretty unfamiliar with it when I started this project. It has all the code, just no visible edits/changes. Sorry about that. I used Neocities for the entirety of this site, which is what I mainly use to publish html/css projects."}, {"post_id": 15446, "ts": "2026-06-25T03:17:46Z", "hours": 2.5336, "text": "Media Review Webpage | Devlog #2 After a long hiatus, I came back to this project with a bit more motivation and inspiration than last time. I had a ton of ideas for what I wanted to do, but I wasn’t sure my skill level was high enough to program them. I only know HTML, CSS, and a bit of JavaScript, so even doing small things like showing/hiding elements takes me a long time. Challenges I wanted to make multiple pages using just one HTML file, since I wasn’t sure how many reviews I’d end up writing, and I wanted everything to be in one document. I got the text at the bottom to work properly like I wanted to, but I still don’t know how to show/hide more than one element at a time. Using Flexbox was also a pain since my images never resize how I want them to, and I want to make this page mobile-friendly. I might look back at my code from a previous project to try and figure that out in the next devlog. Additions I mainly focused on resizing everything to look a bit cleaner, and also because the previous layout was just a 500px box that barely showed any info. I changed the banner at the top and the background to something more library-themed."}, {"post_id": 4603, "ts": "2026-06-07T23:28:41Z", "hours": 0.5278, "text": "Media Review Webpage | Devlog #1 I had an idea for a while to make my own movie review/blog page, but I never really got around to doing it. Stardance was a good excuse for me to start making a lot of projects I’d procrastinated on for the past few months. short update to test lapse/hackatime changed the colours and fixed some sizing issues, planning to replace the photos and redo the actual layout next The majority of the code is carried over from a previous project I started in the past, which I’m planning to revamp and complete during Stardance."}]...
|
Title: Media Review Webpage by @nic | Stardance
D Title: Media Review Webpage by @nic | Stardance
Devlogs:
Media Review Webpage | Devlog #1 I had an idea for a while to make my own movie review/blog page, but I never really got around to doing it. Stardance was a good excuse for me to start making a lot of projects I’d procrastinated on for the past few months. short update to test lapse/hackatime changed the colours and fixed some sizing issues, planning to replace the photos and redo the actual layout next The majority of the code is carried over from a previous project I started in the past, which I’m planning to revamp and complete during Stardance.
Media Review Webpage | Devlog #2 After a long hiatus, I came back to this project with a bit more motivation and inspiration than last time. I had a ton of ideas for what I wanted to do, but I wasn’t sure my skill level was high enough to program them. I only know HTML, CSS, and a bit of JavaScript, so even doing small things like showing/hiding elements takes me a long time. Challenges I wanted to make multiple pages using just one HTML file, since I wasn’t sure how many reviews I’d end up writing, and I wanted everything to be in one document. I got the text at the bottom to work properly like I wanted to, but I still don’t know how to show/hide more than one element at a time. Using Flexbox was also a pain since my images never resize how I want them to, and I want to make this page mobile-friendly. I might look back at my code from a previous project to try and figure that out in the next devlog. Additions I mainly focused on resizing everything to look a bit cleaner, and also because the previous layout was just a 500px box that barely showed any info. I changed the banner at the top and the background to something more library-themed.
Media Review Webpage #3 After a long time procrastinating, I’m finally done with the concept/prototype of my webpage. I wrote one full review for a recent movie I watched (Obsession), formatted it, added photos, and made sure the two lines of JavaScript code work properly. Not sure how to add more pages, though. I’ll figure that out for a future update (though if you know how, please lmk) The fundamentals of this page are pretty much finished! It has a watchlist which I can use to track shows/movies I’m watching, a (mostly) responsive layout, and all the CSS features I intended to add. Unfortunately lost an hour or two here and there because I forgot to unpause my recording, but oh well. The GIT repo for this page unfortunately doesn’t have many commits, since I wasn’t using GitHub to make this and was pretty unfamiliar with it when I started this project. It has all the code, just no visible edits/changes. Sorry about that. I used Neocities for the entirety of this site, which is what I mainly use to publish html/css projects.
Ships:
A small webpage built with HTML, CSS, and a speck of JavaScript for my personal TV show/movie anime reviews! Inspired by old website aesthetics from the y2k era. Presented like a personal blog, and used to track my currently watched/watching shows as well as occasionally sharing my thoughts about recently finished movies. [created in mind with the indie web movement on neocities]...
|
1793054939.9933853
|
1793141339.9933853
|
|
43123
|
Restaurant Management System by @LucyBeany | Stard Restaurant Management System by @LucyBeany | Stardance...
|
LucyBeany
|
0
|
2.16
|
0
|
[]
|
[{"post_id": 39708, "ts": "202 [{"post_id": 39708, "ts": "2026-08-02T20:51:55Z", "hours": 2.1567, "text": "Getting started This is my first dev log for my restaurant management system! Today, I worked on establishing the foundations for the system. In particular, adding the necessary classes to manage and update the menus. My next steps are to add other types of menu items (e.g. desserts and drinks). Below is a screenshot of the current system:"}]...
|
Title: Restaurant Management System by @LucyBeany Title: Restaurant Management System by @LucyBeany | Stardance
Devlogs:
Getting started This is my first dev log for my restaurant management system! Today, I worked on establishing the foundations for the system. In particular, adding the necessary classes to manage and update the menus. My next steps are to add other types of menu items (e.g. desserts and drinks). Below is a screenshot of the current system:...
|
1792536540.694425
|
1793141340.694425
|
|
47963
|
Keyboard by @Sneh_Kahodariya | Stardance
|
Sneh_Kahodariya
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Keyboard by @Sneh_Kahodariya | Stardance
|
1792536541.534544
|
1793141341.534544
|
|
32797
|
my APOD site by @rndm | Stardance
|
rndm
|
1
|
15.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-22T17:57:34Z", "hours": 15.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a NASA APOD website with Vite", "repo": "https://github.com/random-72521/nasa_image_site", "demo": "https://random-72521.github.io/nasa_image_site/"}]...
|
[{"post_id": 33082, "ts": "202 [{"post_id": 33082, "ts": "2026-07-22T17:44:53Z", "hours": 6.0022, "text": "i finished it"}, {"post_id": 27940, "ts": "2026-07-13T21:39:49Z", "hours": 4.1178, "text": "made it look better with a cool loading anim also info but you cant see in ss"}, {"post_id": 24987, "ts": "2026-07-08T21:35:11Z", "hours": 4.5481, "text": "it works it just looks ugly 3 hours of this was spent trying to do gh pages"}]...
|
Title: my APOD site by @rndm | Stardance
Devlogs: Title: my APOD site by @rndm | Stardance
Devlogs:
it works it just looks ugly 3 hours of this was spent trying to do gh pages
made it look better with a cool loading anim also info but you cant see in ss
i finished it
Ships:
I made a NASA APOD website with Vite...
|
1793054941.9700904
|
1793141341.9700904
|
|
43124
|
My awesome macropad! by @dhrishant4101 | Stardance
|
dhrishant4101
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @dhrishant4101 | St Title: My awesome macropad! by @dhrishant4101 | Stardance...
|
1792536542.3743494
|
1793141342.3743494
|
|
47965
|
procegeral cheese by @meke | Stardance
|
meke
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: procegeral cheese by @meke | Stardance
|
1792536543.1992545
|
1793141343.1992545
|
|
40455
|
PeriodicX by @Aditya_Jaiswal | Stardance
|
Aditya_Jaiswal
|
1
|
3.59
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-28T12:56:31Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "PeriodicX is a modern interactive chemistry platform featuring a dynamic periodic table, 3D atomic structure visualization, flashcards, quizzes, element search, and educational tools to make learning chemistry engaging, visual, and accessible.", "repo": "https://github.com/programmeraj2011/PeriodicX", "demo": "https://perodicx.netlify.app/"}]...
|
[{"post_id": 57235, "ts": "202 [{"post_id": 57235, "ts": "2026-08-29T10:42:03Z", "hours": 0.5942, "text": "Devlog #4 updated Elements UI (and sorry for being late i was kinda busy soo)"}, {"post_id": 35759, "ts": "2026-07-27T12:20:35Z", "hours": 0.8558, "text": "Devlog #3 Hello everyone, I have just updated the CSS, added flashcards for each element with its information, included a 3D atomic viewer, and added tests and chemical reactions."}, {"post_id": 35713, "ts": "2026-07-27T09:56:06Z", "hours": 0.8856, "text": "Devlog #2 written all the data of the perodic table"}, {"post_id": 35676, "ts": "2026-07-27T08:40:49Z", "hours": 1.0439, "text": "I am working on my project called PerodicX"}]...
|
Title: PeriodicX by @Aditya_Jaiswal | Stardance
D Title: PeriodicX by @Aditya_Jaiswal | Stardance
Devlogs:
I am working on my project called PerodicX
Devlog #2 written all the data of the perodic table
Devlog #3 Hello everyone, I have just updated the CSS, added flashcards for each element with its information, included a 3D atomic viewer, and added tests and chemical reactions.
Devlog #4 updated Elements UI (and sorry for being late i was kinda busy soo)
Ships:
PeriodicX is a modern interactive chemistry platform featuring a dynamic periodic table, 3D atomic structure visualization, flashcards, quizzes, element search, and educational tools to make learning chemistry engaging, visual, and accessible....
|
1793054943.7587023
|
1793141343.7587023
|
|
47966
|
website! by @julieye | Stardance
|
julieye
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: website! by @julieye | Stardance
|
1792536544.0332813
|
1793141344.0332813
|
|
47968
|
My personal website by @Tiger9633 | Stardance
|
Tiger9633
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My personal website by @Tiger9633 | Stardan Title: My personal website by @Tiger9633 | Stardance...
|
1792536544.8668516
|
1793141344.8668516
|
|
47969
|
My awesome macropad! by @basma | Stardance
|
basma
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @basma | Stardance
|
1792536545.7123349
|
1793141345.7123349
|
|
47970
|
super fluid sim by @morhaf_hussein | Stardance
|
morhaf_hussein
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: super fluid sim by @morhaf_hussein | Starda Title: super fluid sim by @morhaf_hussein | Stardance...
|
1792536546.5786912
|
1793141346.5786912
|
|
43127
|
Winslop OS by @Dada | Stardance
|
Dada
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Winslop OS by @Dada | Stardance
|
1792536547.4058335
|
1793141347.4058335
|
|
24924
|
Borrow Board by @ayaan4657 | Stardance
|
ayaan4657
|
1
|
9.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-24T00:05:42Z", "hours": 9.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made BorrowBoard, a school app where students can borrow, lend, and find lost items like chargers, calculators, goggles, and supplies. The hardest part was making everything feel like a real app instead of just a website, especially connecting auth, profiles, schedules, matching, credits, and the AI model idea. I’m proud that it looks polished, has a clear purpose, and feels like something students could actually use. - for the best experience use a desktop / laptop", "repo": "https://github.com/siccd143/BorrowBoard-YouthxCode", "demo": "https://borrow-board-youthx-code.vercel.app/"}]...
|
[{"post_id": 14761, "ts": "202 [{"post_id": 14761, "ts": "2026-06-23T23:57:40Z", "hours": 0.6406, "text": "Fixed some bugs in sizing and fixed auth in supabase"}, {"post_id": 14741, "ts": "2026-06-23T23:11:09Z", "hours": 8.6736, "text": "Worked on Completing the First Version"}]...
|
Title: Borrow Board by @ayaan4657 | Stardance
Dev Title: Borrow Board by @ayaan4657 | Stardance
Devlogs:
Worked on Completing the First Version
Fixed some bugs in sizing and fixed auth in supabase
Ships:
I made BorrowBoard, a school app where students can borrow, lend, and find lost items like chargers, calculators, goggles, and supplies. The hardest part was making everything feel like a real app instead of just a website, especially connecting auth, profiles, schedules, matching, credits, and the AI model idea. I’m proud that it looks polished, has a clear purpose, and feels like something students could actually use. - for the best experience use a desktop / laptop...
|
1793054947.459775
|
1793141347.459775
|
|
47971
|
WarioWare Game by @tejaskoduri | Stardance
|
tejaskoduri
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: WarioWare Game by @tejaskoduri | Stardance
|
1792536548.2596605
|
1793141348.2596605
|
|
43128
|
website by @denisxd7 | Stardance
|
denisxd7
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: website by @denisxd7 | Stardance
|
1792536549.1068594
|
1793141349.1068594
|
|
33961
|
Trigonometric calculator by @Stv120 | Stardance
|
Stv120
|
1
|
1.0
|
1
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-03T09:46:19Z", "hours": 1.0, "multiplier": 1.01, "payout": 1, "blessing": "neutral", "text": "I made a trigonometric calculator which includes easter eggs, which I am proud of. I can say the challenging part was not the actual code, but how to upload it to GitHub since I am somewhat new to this platform", "repo": "https://github.com/7lul7/TrigCalculator", "demo": "https://github.com/7lul7/TrigCalculator/releases/tag/v1.2"}]...
|
[{"post_id": 28200, "ts": "202 [{"post_id": 28200, "ts": "2026-07-14T10:35:55Z", "hours": 1.1761, "text": "Hello guys! As its my first devlog I want to mention I am currently working on multiple projects one of them being the trigonometric calculator which calculates either the sine cosine tangent and cotangent of a given angle in degrees. The project is still in the console version, but I’m developing another graphical version which will be made using raylib!"}]...
|
Title: Trigonometric calculator by @Stv120 | Stard Title: Trigonometric calculator by @Stv120 | Stardance
Devlogs:
Hello guys! As its my first devlog I want to mention I am currently working on multiple projects one of them being the trigonometric calculator which calculates either the sine cosine tangent and cotangent of a given angle in degrees. The project is still in the console version, but I’m developing another graphical version which will be made using raylib!
Ships:
I made a trigonometric calculator which includes easter eggs, which I am proud of. I can say the challenging part was not the actual code, but how to upload it to GitHub since I am somewhat new to this platform...
|
1793054949.1920497
|
1793141349.1920497
|
|
47972
|
My very own WebOS by @Edson | Stardance
|
Edson
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @Edson | Stardance
|
1792536549.9617813
|
1793141349.9617813
|
|
7250
|
PCA9685 Debugging Panel by @xk | Stardance
|
xk
|
1
|
7.56
|
19
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-06-04T16:20:20Z", "hours": 6.0, "multiplier": 3.44, "payout": 19, "blessing": "neutral", "text": "This is a web-based remote-control panel for debugging PCA9685 servo drivers on robots. The first problem I encountered was the accessibility of the hardware. Sometimes I want to debug the UI and API, but I don’t have a PCA9685 board nearby. So, I co-op with Deepseek to develop the mock mode, enabling the robot to “pretend that it has established an I2C connection to a PCA9685 driver”. If you are using the PCA9685 on your robot, you can easily debug it by simply installing this package via pip on the robot. Even if you don’t have the corresponding hardware, you can also use the mock mode to observe how the UI works. I hope this will inspire you. I’m still working on this project, and I hope it to become a “de facto standard” sometime.", "repo": "https://github.com/xiaokai-lyk/PCA9685-debugging-panel", "demo": "https://pypi.org/project/pca9685-debugging-panel/"}]...
|
[{"post_id": 8001, "ts": "2026 [{"post_id": 8001, "ts": "2026-06-13T10:52:09Z", "hours": 1.5586, "text": "V 0.2.0 now available! ✨ New Features: Action Recording & Replay Internationalization (i18n) Debug Mode (–debug) Clear Cache 💅 Improvements JS-fail overlay Accessibility Enhanced action buttons See GitHub release below for more infomation: https://github.com/xiaokai-lyk/PCA9685-debugging-panel/releases/tag/v0.2.0"}, {"post_id": 2199, "ts": "2026-06-04T15:50:08Z", "hours": 5.5567, "text": "v0.1.0 — Initial Release 🎉 Basic functions are now available and it has been published to PyPi~ Co-authed by Claude-code (used Deepseek as LLM) Visit the Github repo for more demonstrations~"}]...
|
Title: PCA9685 Debugging Panel by @xk | Stardance
Title: PCA9685 Debugging Panel by @xk | Stardance
Devlogs:
v0.1.0 — Initial Release 🎉 Basic functions are now available and it has been published to PyPi~ Co-authed by Claude-code (used Deepseek as LLM) Visit the Github repo for more demonstrations~
V 0.2.0 now available! ✨ New Features: Action Recording & Replay Internationalization (i18n) Debug Mode (–debug) Clear Cache 💅 Improvements JS-fail overlay Accessibility Enhanced action buttons See GitHub release below for more infomation: https://github.com/xiaokai-lyk/PCA9685-debugging-panel/releases/tag/v0.2.0
Ships:
This is a web-based remote-control panel for debugging PCA9685 servo drivers on robots. The first problem I encountered was the accessibility of the hardware. Sometimes I want to debug the UI and API, but I don’t have a PCA9685 board nearby. So, I co-op with Deepseek to develop the mock mode, enabling the robot to “pretend that it has established an I2C connection to a PCA9685 driver”. If you are using the PCA9685 on your robot, you can easily debug it by simply installing this package via pip on the robot. Even if you don’t have the corresponding hardware, you can also use the mock mode to observe how the UI works. I hope this will inspire you. I’m still working on this project, and I hope it to become a “de facto standard” sometime....
|
1793054950.0646834
|
1793141350.0646834
|
|
43129
|
Aetherion by @animesh_varma | Stardance
|
animesh_varma
|
0
|
8.45
|
0
|
[]
|
[{"post_id": 45854, "ts": "202 [{"post_id": 45854, "ts": "2026-08-12T16:04:51Z", "hours": 8.4467, "text": "AAAAAAAA!!! I am basicly forced to write this devlog as it has been around 8 hours without one… I thought that I would not make a devlog until I at least make the login work consistently, but here we are… Anywho, this will be my first devlog, till now I just have created a rough app for testing out calls and responses to the instagram endpoints, a majority of the time was spent trying to break Instagrams SSL pinning (No I wont be telling you how I did it, or will I [cue vsauce music]). Anyway, I wont be telling you much now, I am stuck between by class 12, SAT and my project, I just hope it turns out well… As for what Aetherion does, ill be sure to explain it in the next devlog!"}]...
|
Title: Aetherion by @animesh_varma | Stardance
De Title: Aetherion by @animesh_varma | Stardance
Devlogs:
AAAAAAAA!!! I am basicly forced to write this devlog as it has been around 8 hours without one… I thought that I would not make a devlog until I at least make the login work consistently, but here we are… Anywho, this will be my first devlog, till now I just have created a rough app for testing out calls and responses to the instagram endpoints, a majority of the time was spent trying to break Instagrams SSL pinning (No I wont be telling you how I did it, or will I [cue vsauce music]). Anyway, I wont be telling you much now, I am stuck between by class 12, SAT and my project, I just hope it turns out well… As for what Aetherion does, ill be sure to explain it in the next devlog!...
|
1792536550.8033984
|
1793141350.8033984
|
|
47973
|
webnix by @neonxsl | Stardance
|
neonxsl
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: webnix by @neonxsl | Stardance
|
1792536551.6648357
|
1793141351.6648357
|
|
47974
|
Edson.com by @Edson | Stardance
|
Edson
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Edson.com by @Edson | Stardance
|
1792536552.5042841
|
1793141352.5042841
|
|
41555
|
FluxEngine Website by @olebeuscher | Stardance
|
olebeuscher
|
1
|
3.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-30T15:36:59Z", "hours": 3.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "The FluxTron Website is my very first website for my project Fluxtron which you can also see in Hackclub stardance. I want to make this website more interactive and add javascript but for now it is ready to ship and to be visible for th world. (Im so proud of me for finishing my first project lol)", "repo": "https://github.com/WeirdCookie/FluxEngine-Website", "demo": "https://fluxtron.weirdcookie.workers.dev/"}]...
|
[{"post_id": 37659, "ts": "202 [{"post_id": 37659, "ts": "2026-07-30T15:29:13Z", "hours": 1.8181, "text": "SHIP #1 I finished my first project ever. (˶>⩊<˶) I deployed the website on cloudflare and made is visible for everyone under https://fluxtron.weirdcookie.workers.dev/ I also added much css and learned very much new things since my last devlog. :)"}, {"post_id": 37132, "ts": "2026-07-29T16:52:41Z", "hours": 0.7519, "text": "Devlog #1 I created the Project and i added the style.css and the index.html and have now cool Background colour"}]...
|
Title: FluxEngine Website by @olebeuscher | Starda Title: FluxEngine Website by @olebeuscher | Stardance
Devlogs:
Devlog #1 I created the Project and i added the style.css and the index.html and have now cool Background colour
SHIP #1 I finished my first project ever. (˶>⩊<˶) I deployed the website on cloudflare and made is visible for everyone under https://fluxtron.weirdcookie.workers.dev/ I also added much css and learned very much new things since my last devlog. :)
Ships:
The FluxTron Website is my very first website for my project Fluxtron which you can also see in Hackclub stardance. I want to make this website more interactive and add javascript but for now it is ready to ship and to be visible for th world. (Im so proud of me for finishing my first project lol)...
|
1793054952.904233
|
1793141352.904233
|
|
47975
|
Frictionless by @kirbo | Stardance
|
kirbo
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Frictionless by @kirbo | Stardance
|
1792536553.3523672
|
1793141353.3523672
|
|
43131
|
Zephyr OS by @rayyan_nidal_k | Stardance
|
rayyan_nidal_k
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: Zephyr OS by @rayyan_nidal_k | Stardance
|
1792536554.2158968
|
1793141354.2158968
|
|
41561
|
My first slack bot! by @potionj | Stardance
|
potionj
|
2
|
3.59
|
6
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-06T23:04:59Z", "hours": 3.0, "multiplier": 1.7, "payout": 6, "blessing": "neutral", "text": "Cleaned up files in ssh, added wordle.", "repo": "https://github.com/minye065/slackbot-template", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354?skip_today=1"}, {"ship_num": 2, "ts": "2026-07-29T16:08:35Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Very simple slack bot with 4 commands", "repo": "https://github.com/minye065/slackbot-template", "demo": "https://app.slack.com/client/E09V59WQY1E/C0P5NE354?skip_today=1"}]...
|
[{"post_id": 47272, "ts": "202 [{"post_id": 47272, "ts": "2026-08-15T02:58:11Z", "hours": 0.5919, "text": "Fixed the issue where duplicate letters were getting represented incorrectly."}, {"post_id": 42299, "ts": "2026-08-06T23:04:22Z", "hours": 2.025, "text": "Added a wordle command"}, {"post_id": 37923, "ts": "2026-07-30T22:41:17Z", "hours": 1.2228, "text": "added more commands, fixed old ones, added 3 helper functions and lists of new questions"}, {"post_id": 37099, "ts": "2026-07-29T16:05:31Z", "hours": 0.3981, "text": "Added commands to bot - ping, help, rand, dice"}]...
|
Title: My first slack bot! by @potionj | Stardance Title: My first slack bot! by @potionj | Stardance
Devlogs:
Added commands to bot - ping, help, rand, dice
added more commands, fixed old ones, added 3 helper functions and lists of new questions
Added a wordle command
Fixed the issue where duplicate letters were getting represented incorrectly.
Ships:
Very simple slack bot with 4 commands
Cleaned up files in ssh, added wordle....
|
1793054954.65761
|
1793141354.65761
|
|
47978
|
My awesome macropad! by @mohith_r145 | Stardance
|
mohith_r145
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My awesome macropad! by @mohith_r145 | Star Title: My awesome macropad! by @mohith_r145 | Stardance...
|
1792536555.0950797
|
1793141355.0950797
|
|
43132
|
My very own WebOS by @VISHWA-TEJA | Stardance
|
VISHWA-TEJA
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My very own WebOS by @VISHWA-TEJA | Stardan Title: My very own WebOS by @VISHWA-TEJA | Stardance...
|
1792536555.93795
|
1793141355.93795
|
|
41569
|
Stardust calculator by @Arbuz | Stardance
|
Arbuz
|
1
|
6.48
|
13
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-07-31T03:50:35Z", "hours": 6.0, "multiplier": 2.29, "payout": 13, "blessing": "neutral", "text": "I made a web tool for estimating how much Stardust you’ll earn from your project. The most challenging part was learning the basics of Javascript for this project. I’m proud that I made a functional tool in 6 hours. You can test my project here: https://arbuzyonak.github.io/Stardust-Calculator/", "repo": "https://github.com/Arbuzyonak/Stardust-Calculator", "demo": "https://arbuzyonak.github.io/Stardust-Calculator/"}]...
|
[{"post_id": 38579, "ts": "202 [{"post_id": 38579, "ts": "2026-08-01T01:57:00Z", "hours": 0.4808, "text": "Devlog 4 Added an hour until goal calculator"}, {"post_id": 38000, "ts": "2026-07-31T03:36:25Z", "hours": 1.3244, "text": "Devlog 3 The site is done! You can now estimate how much stardust you will get and see how many days it will take to hit your goal!"}, {"post_id": 37959, "ts": "2026-07-31T00:44:32Z", "hours": 1.09, "text": "Devlog 2 Added better ui to my stardust calculator"}, {"post_id": 37797, "ts": "2026-07-30T18:48:46Z", "hours": 3.1964, "text": "Devlog 1 So, I’m making a calculator to check how much stardust you can potentially get from your project! I will keep you updated as I improve the ui"}]...
|
Title: Stardust calculator by @Arbuz | Stardance
Title: Stardust calculator by @Arbuz | Stardance
Devlogs:
Devlog 1 So, I’m making a calculator to check how much stardust you can potentially get from your project! I will keep you updated as I improve the ui
Devlog 2 Added better ui to my stardust calculator
Devlog 3 The site is done! You can now estimate how much stardust you will get and see how many days it will take to hit your goal!
Devlog 4 Added an hour until goal calculator
Ships:
I made a web tool for estimating how much Stardust you’ll earn from your project. The most challenging part was learning the basics of Javascript for this project. I’m proud that I made a functional tool in 6 hours. You can test my project here: https://arbuzyonak.github.io/Stardust-Calculator/...
|
1793054956.6310897
|
1793141356.6310897
|
|
47979
|
My own site! by @arjunrajgor01 | Stardance
|
arjunrajgor01
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @arjunrajgor01 | Stardance
|
1792536556.8011541
|
1793141356.8011541
|
|
43133
|
FEG by @princeofshadow | Stardance
|
princeofshadow
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: FEG by @princeofshadow | Stardance
|
1792536557.6431916
|
1793141357.6431916
|
|
43135
|
WarioWare Game by @MAZTRO_ | Stardance
|
MAZTRO_
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: WarioWare Game by @MAZTRO_ | Stardance
|
1792536558.4797046
|
1793141358.4797046
|
|
41570
|
FUNKOI by @myreester | Stardance
|
myreester
|
1
|
0.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-02T08:00:50Z", "hours": 0.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "Hello,i am a 14 year old from india.Since,i have school i spent my 2 sundays on this project. You might think i am lying but this project was first created in my old account mcking. And if you try this project you might find some easter eggs.", "repo": "https://github.com/PEAKAKAME/https-peakakame.github.io-", "demo": "https://peakakame.github.io/https-peakakame.github.io-/"}]...
|
[{"post_id": 39340, "ts": "202 [{"post_id": 39340, "ts": "2026-08-02T07:56:34Z", "hours": 0.4339, "text": "Working on my wesite FUNKOI.Added a neon glow animation to my search bar."}]...
|
Title: FUNKOI by @myreester | Stardance
Devlogs:
Title: FUNKOI by @myreester | Stardance
Devlogs:
Working on my wesite FUNKOI.Added a neon glow animation to my search bar.
Ships:
Hello,i am a 14 year old from india.Since,i have school i spent my 2 sundays on this project. You might think i am lying but this project was first created in my old account mcking. And if you try this project you might find some easter eggs....
|
1793054958.6961467
|
1793141358.6961467
|
|
47984
|
My own site! by @theghostoftheuchiha38 | Stardance
|
theghostoftheuchiha38
|
0
|
0.0
|
0
|
[]
|
[]
|
Title: My own site! by @theghostoftheuchiha38 | St Title: My own site! by @theghostoftheuchiha38 | Stardance...
|
1792536559.311901
|
1793141359.311901
|
|
43136
|
B1T Jam by @ViceVersa | Stardance
|
ViceVersa
|
0
|
14.28
|
0
|
[]
|
[{"post_id": 44726, "ts": "202 [{"post_id": 44726, "ts": "2026-08-10T17:42:36Z", "hours": 6.3364, "text": "The game is done! Please make sure to check it out once the game is over, it’s called “1234 Snore” (because of the sleep theme)."}, {"post_id": 40932, "ts": "2026-08-04T19:30:09Z", "hours": 7.9436, "text": "The core game is essentially done! This jam only allows for 2 colors which makes art much easier for me (I’m not good at art)"}]...
|
Title: B1T Jam by @ViceVersa | Stardance
Devlogs: Title: B1T Jam by @ViceVersa | Stardance
Devlogs:
The core game is essentially done! This jam only allows for 2 colors which makes art much easier for me (I’m not good at art)
The game is done! Please make sure to check it out once the game is over, it’s called “1234 Snore” (because of the sleep theme)....
|
1792536560.1446462
|
1793141360.1446462
|
|
6717
|
Magic Deck Builder by @Joseph-T | Stardance
|
Joseph-T
|
1
|
13.0
|
0
|
[{"ship_num": 1, "ts": "2026-0 [{"ship_num": 1, "ts": "2026-08-08T01:03:55Z", "hours": 13.0, "multiplier": null, "payout": 0, "blessing": "neutral", "text": "I made a site for making Magic The Gathering decks What’s Magic The Gathering? Magic the gathering is a card game where players make their own decks What did I make: I made a website that gives basic recommendations on what cards a user should use, based on the rest of their deck. Challenges: I big challenge was hosting the site in the end I had to move all the server side code for suggesting cards to client side so I could host it through GitHub pages How to use: Just start searching for cards to add to your deck, and the system will start to recommend cards. Features: Recommendation Filters & Search Quick Stats", "repo": "https://github.com/joseph-tighe/Magic-Deck-Creator", "demo": "https://joseph-tighe.github.io/Magic-Deck-Creator/"}]...
|
[{"post_id": 42999, "ts": "202 [{"post_id": 42999, "ts": "2026-08-08T00:50:32Z", "hours": 2.2425, "text": "Changes Made I worked on the algorithm for recommending land, and I ported my Express app to Github Pages. I also redid the UI Recommendation algorithm The algorithm just takes the ratio of required land, and compares that to the ratio of the land that is already in the deck and tries to match the two, it just works slightly better than before and accounts for more edge cases Github pages Github pages is fully static, meaning I had to trade out all my server side code for client side stuff, it doesn’t affect the user too much, but limits the app in the long run. But anyway you can actually use it now. Updated UI I just think it looks slightly better, and provides more feedback on the search, and gives slightly more info on the card. As I am sure you can tell front-end is not where I excel, but it is slightly better than before."}, {"post_id": 5087, "ts": "2026-06-08T19:30:28Z", "hours": 1.9144, "text": "Changes Made I just fixed a bunch of bugs before I decide to ship this. Fixed bugs Worked on fixing some basic bugs in the card recommendation, so that I could make it work better with wild Mana on cards, it took me 30 minutes to realize a variable should have had the let keyword instead of the var keyword. But now it works much better and is in a place to where I can start adding slightly more advanced recommendations."}, {"post_id": 4583, "ts": "2026-06-07T22:30:56Z", "hours": 2.2344, "text": "Changes Made Added a simple non-ai based card recommender for land, I also added a simple graph showing the land distribution. Started working on the backend for the AI recomendation. Land recommendations The land recommendations identifies the gap between the mana required and the mana owned, a proportion based system would be better."}, {"post_id": 3003, "ts": "2026-06-05T22:45:22Z", "hours": 1.3428, "text": "Changes Made I wrote a script to get data for training the AI Getting the data The app will use AI to help make recommendations on what cards are good for the app. The script I wrote scrapes the internet for complete decks and saves what cards they have into a JSON that can be used to train the AI later."}, {"post_id": 2952, "ts": "2026-06-05T21:11:13Z", "hours": 1.4106, "text": "Changes Made I added filtering to the search and started on the training for AI card prediction Filtering I added filtering so the user can more easily specify what card they are looking for. AI card prediction I wrote a few test scripts to figure out how I will train my AI to do it."}, {"post_id": 2851, "ts": "2026-06-05T18:11:11Z", "hours": 1.0747, "text": "Changes Made Made search more reliable and added simple loading animation Search The search would sometimes answer the query before the current one instead of the current one because that packet would be late. But that is no longer a problem."}, {"post_id": 2480, "ts": "2026-06-05T00:05:32Z", "hours": 1.2358, "text": "Changes Made Made a basic website and managed to get the search feature working Basic website The website is a really basic layout but should be fine for now. Search Search uses the Magic The Gathering API ( https://api.magicthegathering.io ). It queries every time the search bar changes."}, {"post_id": 1873, "ts": "2026-06-04T02:43:10Z", "hours": 1.5497, "text": "Changes Made I setup the project and started screwing with an API for getting basic information Tech Stack Node JS, Express, js, html, css, the api.magicthegathering.io API"}]...
|
Title: Magic Deck Builder by @Joseph-T | Stardance Title: Magic Deck Builder by @Joseph-T | Stardance
Devlogs:
Changes Made I setup the project and started screwing with an API for getting basic information Tech Stack Node JS, Express, js, html, css, the api.magicthegathering.io API
Changes Made Made a basic website and managed to get the search feature working Basic website The website is a really basic layout but should be fine for now. Search Search uses the Magic The Gathering API ( https://api.magicthegathering.io ). It queries every time the search bar changes.
Changes Made Made search more reliable and added simple loading animation Search The search would sometimes answer the query before the current one instead of the current one because that packet would be late. But that is no longer a problem.
Changes Made I added filtering to the search and started on the training for AI card prediction Filtering I added filtering so the user can more easily specify what card they are looking for. AI card prediction I wrote a few test scripts to figure out how I will train my AI to do it.
Changes Made I wrote a script to get data for training the AI Getting the data The app will use AI to help make recommendations on what cards are good for the app. The script I wrote scrapes the internet for complete decks and saves what cards they have into a JSON that can be used to train the AI later.
Changes Made Added a simple non-ai based card recommender for land, I also added a simple graph showing the land distribution. Started working on the backend for the AI recomendation. Land recommendations The land recommendations identifies the gap between the mana required and the mana owned, a proportion based system would be better.
Changes Made I just fixed a bunch of bugs before I decide to ship this. Fixed bugs Worked on fixing some basic bugs in the card recommendation, so that I could make it work better with wild Mana on cards, it took me 30 minutes to realize a variable should have had the let keyword instead of the var keyword. But now it works much better and is in a place to where I can start adding slightly more advanced recommendations.
Changes Made I worked on the algorithm for recommending land, and I ported my Express app to Github Pages. I also redid the UI Recommendation algorithm The algorithm just takes the ratio of required land, and compares that to the ratio of the land that is already in the deck and tries to match the two, it just works slightly better than before and accounts for more edge cases Github pages Github pages is fully static, meaning I had to trade out all my server side code for client side stuff, it doesn’t affect the user too much, but limits the app in the long run. But anyway you can actually use it now. Updated UI I just think it looks slightly better, and provides more feedback on the search, and gives slightly more info on the card. As I am sure you can tell front-end is not where I excel, but it is slightly better than before.
Ships:
I made a site for making Magic The Gathering decks What’s Magic The Gathering? Magic the gathering is a card game where players make their own decks What did I make: I made a website that gives basic recommendations on what cards a user should use, based on the rest of their deck. Challenges: I big challenge was hosting the site in the end I had to move all the server side code for suggesting cards to client side so I could host it through GitHub pages How to use: Just start searching for cards to add to your deck, and the system will start to recommend cards. Features: Recommendation Filters & Search Quick Stats...
|
1793054960.4778695
|
1793141360.4778695
|
|
47985
|
DoubleDeltas by @parkerrupe | Stardance
|
parkerrupe
|
0
|
47.5
|
0
|
[]
|
[{"post_id": 55952, "ts": "202 [{"post_id": 55952, "ts": "2026-08-08T00:00:00Z", "hours": 2.0, "text": "I spent 2 entire hours putting the full printer cad together. It looks so good! Parker, how could adding just the gantries take 2 hours, you ask? Well well well. Basically, each ball joint had to be defined as a ball joint in fusion with proper motion limits and whatnot. And fusion does NOT like this. Fusion crashed 3 times. It errored out unrelated things for no reason more times than I rememeber. It took multiple MINUTES to load each ball joint at times. It was pure torture. But I got it done! It’s pretty cool, I defined all the linear rails as sliders and stuff and so I can literally drag around the effectors and they move like a delta should. One note, the bed has been lowered to 160mm instead of 180mm. This is because of some future plans and also because it just feels better in terms of proportions. It looks so nice now! Oh, and I had to make the printer taller. We are now using 600mm rails instead of 500mm as my arm length was incorrect. Turns out, you can’t just optimize for a 90mm gantry, because the quantum delta side needs way more travel than that. It was actually pretty funny when I first put the cad together with the short arms. Squatted delta. I think it’s funny. Anywho, I got it all done eventually and got fusion to stop crying about it (mostly). It does take noticeably longer to open the document now and timeline changes take a significant amount of time to fully propagate through all the joints. But, because I had to increase the arm lengths, I suddenly didn’t have enough travel for the carriages. Hence why the frame is bigger now."}, {"post_id": 55953, "ts": "2026-08-07T00:00:00Z", "hours": 6.0, "text": "Idlers! I started out with a simple sketch that shows part of the extrusion profile and the linear rail profile, then used that to align my idler hardware (two bearings, a pulley, and a shaft). From there, I made a sketch for the mounting block. This would wrap around to the other side aswell, bolting onto both sides of the vertical extrusion and holding out the tensioner. I guess I should talk about my tensioning method. Basically, I am going to have two idlers “floating” in the middle of the frame vertically. One for the top belt, one for the bottom. These then get pulled towards eachother by bolts and nuts, pulling tension on both top and bottom at once. I think it will work? The only issue is any differences in assembly or belt length will render this useless. Once tension is pulled, the side bolts get clamped down hard onto the vertical extrusion. Easy peasy. So anyways, the body gets doubled to the other side and connected at the middle. I then added nut recesses so that I don’t need to hold the nut while I pull tension, and flattened one side of the roundover on the end. This would be the mating surface of the two idlers, so it makes sense to be flat. This gets mirrored to the other side along with the hardware. Boom, now we have two idlers that meet at the middle. A couple fillets here and there, assigning materials, and adding bolts gets us to this result. I think this turned out really nice! I actually initiallly had some issues with where my mounting holes were and how long the idler was. Turns out I added 8mm somewhere I shouldn’t have. Took a minute to figure out where the discrepancy was but it was an easy fix. And with that, we can install it in the cad! Looks great! Okay, spoiler. I immediately hated it. I don’t trust that I can build both sides identically and I don’t think I can easily get enough travel on the tensioner. Plus, the amount of tension directly correlates to how far my effectors can move instead of that being a fixed value. That is so stupid. Ugh. Back to the drawing board. Literally, let’s make a sketch. So this is my idea. Some sort of mechanism to pull up on the upper span of belt so that I can have stationary idlers. I think I can pull something off. It would integrate with the motor module well I think and lets me make the tensioner and idlers out of sheet metal - so, the entire belt path is sheet metal. The whole thing! That is so freakin cool. This time I actually started with making a sketch of one of the side sheets. The assembly would overall be similar to the old one, except there wouldn’t be anything bridging the gap between the two sides besides the idlers. The side pieces would also be further apart to accomodate for the size of the aluminum extrusions. This just meant I would need a longer shaft. That’s fine. This gets extruded to create the sheet. These are 3/16” thick aluminum sheets that will be lasercut by Oshcut (not sponsored, just cheap). Then I literally just duplicate it and assemble everything. 4 bearings, 2 pulleys, 2 35mm long 5mm dowels, 2 9mm spacers, 2 4mm spacers (both printed), 4 m5x10 bolts, and 2 sheets. All assembled into the double idler! Oh there will also be 4 T nuts for mounting but I am not cadding those as my PC already doesn’t like how many components are in this assembly and I would have to align each and every one by hand. Integrated into the cad, they look awesome! Gosh this printer looks good. Anywho, we have one thing left - the motor side tensioner. This is relatively straight forward. I started by just getting the tensioner hardware into place. Then, I added side plates that would make up the tensioner body. These are super simple and will just be held together with 2x M3 bolts and a printed part. Of course, the motor module side plate needs a cutout for the idler! This cutout is not only for clearance, but th [Entry truncated]"}, {"post_id": 55954, "ts": "2026-08-04T00:00:00Z", "hours": 3.0, "text": "Oh. My. Gosh. I made the sheet metal motor mounts affordable!! I just had to switch all the lasercut parts from powdercoated steel to uncoated 5052 aluminum, and do some trickery to get the motor mounts down to 2 plates instead of 3. Badda bing badda boom, it’s somehow super affordable now!! Like, super affordable. Especially since I have a 50% coupon. This means I can use more lasercutting elsewhere! Like… an electrical panel!! Anywho, I decided to fully redesign the motor mounts. I kinda had to since to get them to fit as 2 plates instead of 3, I needed to move the motor back 5mm and out like 2.5mm ish. Which isn’t bad. Started the same as last time with a pile of hardware, just with slightly different spacing. Once again, I like to work from the motor mount. I really don’t know why I do this - I should be doing the entire plate in one sketch so that my timeline stays cleaner and they are easier to edit, but eh, old habits die hard. Turn it into a full plate by adding the bores for bearings and pins (which are currently oversized, oops). Then I double it for the second plate. Just a simply copy and paste. Now I fix the bores and widths on the plates. These are 0.188” thick 5052 aluminum. I need to double check how I should be tolerancing my bores so that they work as interference/light press fits. Right now they are just exactly matching the part OD for the bore ID, which I think might be fine because of laser kerf? Dunno. I will ask my brother what he did. I also shortened the plates by removing some from the side that is against the vertical extrusion. Or, correction, WAS against the vertical extrusion. Because of how far off center these plates are, I needed to just have it not go up against the vertical otherwise it would hit the horizontals. Shifting it to be centered would take a lot more offseting of the motor, which is something I really want to avoid. Next we get a big printed spacer. This serves as the buffer between the two plates and is also how the modules will mount, with heat inserts in top/bottom (m5 of course). Because of that part, we also need these cutouts in the sides of the plates. These make it so that I can actually still manage to route the belts despite them being somewhat encased in material - this un-encases them. Hopefully it is enough to be able to route the belts. I think it’s gonna be a bit tight, expecially once installed in the frame, but it should be possible. Hopefully not too painful. We will find out! You can also see I added mounting holes in that operation. Same cutting op, just added a bunch of M3 holes. These either thread into the motor or thread into the back plate. Since the plates aren’t getting powder coated, I am willing to deal with tapping them now. Add some screws in the sides and screw holes on top/bottom and we are done with the new motor modules! The mounting holes on top are identical to those on bottom. They are off center so that they are centered with the belt path and thus the rest of the printer. Helps things look nicer from the outside. And here they are integrated into the machine! Gosh, this looks awesome, and will be incredibly rigid! In fact, this means that the only part of my motion system that isn’t metal (or, at least, structurally metal) will be the idlers/tensioners! And even then, I might be able to do something about that… Maybe. Gonna mess around with lasercut designs, CNC designs, and even SLM designs. We will see how this goes! I love how these turned out and I love even more that I managed to fit it in my budget. This is so exciting!!"}, {"post_id": 55955, "ts": "2026-08-03T00:00:00Z", "hours": 2.0, "text": "Bulking up the printed motor mounts because sheet metal is too expensive. Alright, so. Sheet metal adds about $250 to my costs, so I cannot do sheet metal for these motor assemblies. But that’s fine, I don’t need it. I started by going back to the blocky version. I extended out the tall bit so that there is more material over the bearing and idler shaft for strength. Then I actually started making the walls thicker for more material/bracing. Because the end of the part is constrained to 30mm, I need that little divot on the front right. I did the same to the opposite side and brought the curves back! These curves look pretty nice. They start out matching but then the front one diverges into its own thing. It was at this point I realized my walls were now thick enough to utilize the 4th screw hole on the motor. This will help a lot with making everything more rigid. On the initial version I wasn’t able to use this hole because I was optimizing for the entire part to be 30mm wide rather than just the end of it. This would have been fine, but this new bulkier appraoch is just better. Lastly, I added mounting. I added one M5 screw on the rear vertical wall that will actually use a T nut to bolt to the vertical extrusion, while I also added top holes (and unseen bottom holes) for M5 heat inserts for the top/bottom plates to bolt to. This forms a printed and metal sandwich, which is great for rigidity. Integrated into the assembly, it looks great! It kinda bothers me that the screw holes are off center but I might be able to fix that later. That’s motor assemblies done. Yay! I just need to do idlers/tensioners and the “core” of the printer will be done."}, {"post_id": 55925, "ts": "2026-08-02T00:00:00Z", "hours": 3.5, "text": "Motor module 2 electric boogaloo?? Ok so, a friend told me to make some motor modules out of sheet metal. This is a good idea! Unfortunately I think it is out of budget… but it is nice to have around!! Anywho. Start with the same layout as before. Create a motor side plate. This plate is not thick enough for the bearing on its own - it will need stacked with another. That makes these motor modules 3 plates each. 3 times 6 is 18 plates total. Youch, my wallet. Extend it and create a matching idler side plate. This plate can be thick enough for the bearings on its own, so it won’t need stacked. This is good for budget. There’s that second stacked plate. Each thin plate is 0.1”. The thick plate is, you guessed it, 0.2”. From there I made these simple printed part structural spacers. These are designed to be minimal at the top so I can still hopefully route belts. I think it will be difficult to route belts in this design no matter what I do, but this could help. Last, I just add screws and nuts that go through the whole sandwich. This is the easiest and most rigid way I could think of assembling. And I think it turned out really nice! It’s just… these would add $200-$250 to my budget… I think I would rather bulk up the printed part. So that’s what I will do next entry - bulk up the printed version! It is such a small part that I think it is fine - end to end, this thing is like, 110mm. So it really shouldn’t matter much. Actually, one last thing. This cutout will help a ton with belt routing. Ok that’s all for real this time."}, {"post_id": 55926, "ts": "2026-08-01T00:00:00Z", "hours": 5.0, "text": "Motor assemblies!! These motor assemblies are required to get horizontal belt pathing without moving the motors outside of the frame. You can see my preliminary sketch here. I will be using bearings and live shaft idlers to offset the motors about 72mm. Now, moving the motors out of the frame would be a 45mm offset. So, the difference is about an inch. That’s really not bad! I am willing to accept that. Anywho, I take that preliminary sketch and use fusion’s Derive tool, which I just discovered, to move this design into a seperate document. That way we can keep the timeline of this part and the overall printer a bit cleaner. A bit. I am using 605 bearings basically everywhere here since they are nice and beefy for high tension 9mm belts. You can see them on either end of the pulley on the right as well as standalone slightly to the upper left of that pulley as an idler on the back of the belt. This setup mimics having the motor aligned with the carriage path without it actually being, as otherwise the motor would hit the frame. I always like to start with doubleshear on the motor. No particular reason, that’s just where I start. From there it just gets extended. Then I add the 30mm shafts for the idlers and some countersinks for the motor screws! That way I don’t need super long motor screws. I actually then extended up one end. I figured I can use this part to help locate the linear rail! So this print extends to exactly the height the linear rail needs. Since there is one on both top and bottom, it will sandwich the rail and align it. From here, I decided to challenge myself a bit. I wanted this part to be organic! Not as blocky. So, I made this nice spline! This curve is pretty nice looking and is just defined by some random points and the idler bores. With a few fillets, you get a pretty nice result. Slight issue, however, is that this part is centered on the pulleys being centered. Which is fine, except that the pulleys have hubs. You can see those hubs here. So the actual belt is currently not centeed. This is a relatively easy fix! The one big constraint is that the end of this part, where the belt is coming out and the highest point of the part, needs to be 30mm wide. This is because my vertical extrusion is only 30mm wide. So, if it is wider, it will hit the horizontal extrusions of the frame. With a couple extrudes here and there, some press pulls, blah blah, we get this!! The part looks super organic with the recesses on the sides and whatnot. Those are mainly there to provide enough material for the bearing but still keep the part thin enough at the end to fit between the horizontal parts of the frame! And here they are in place in the frame. Currently they are mounted by 3 screws bolting up through the bottom plate and no other mounting. I may change that a bit though… Like, I could bolt to the extrusions, or I could bolt to the top plate of the frame sandwich, all for higher rigidity! For now, I am done though. I am pretty happy with this part as is."}, {"post_id": 55927, "ts": "2026-07-30T00:00:00Z", "hours": 3.5, "text": "Carriages! Okay, these had me stumped for a while. I spent hours (that I am not logging) staring at what others have done, staring at my own CAD, staring at previous designs I have worked with. And I came to a conclusion - I don’t like belt paths where the belt is perpendicular to the carriages. I just don’t. It is so annoying to work with. This is what I mean by perpendicular by the way, sketched over a basic flat carriage I had thrown together. This carriage is what I spent most of my time staring at. Because, somehow, I needed to add belt clamps to this. I hated it. There wasn’t a way I could think of to do it CNC, and that was something I really wanted to do for this project (cnc parts). So, I wanted the belt parallel to the carriages (aka rotated 90 degrees). This would be way easier to clamp the belts and allow for much lighter carriages. This is what I came up with. CNC machined unibody with a flat lasercut plate as a belt clamp. The plate is sandwiched between the carriage and linear rail carriage. So, I just crank down on the 4 mounting screws and it grabs the belt. The belt tooth geometry is based off of Ruiqimao’s Carveoff belt clamps, as those are proven working for 9mm tension. A friend - well actually three friends - then suggested one change, which makes the carriages look nicer and way stronger. Diamond carriages! I think this looks awesome. Now, I keep having people telling me to double shear the ball joints. I don’t think this is necessary. But, they didn’t believe me. So, I decided to try and run a fusion 360 static force sim! First, I calculated the max load on the carriages using a [tool from my friend Deadlock]. This gave me: A max of 30 ish newtons for 500k accel. Not bad. I will be simming with 50 newtons just to be special and over the top. After messing with the sim for a while, I got this result. Setting this up was weird and I have no idea if it is correct, but basically I just defined the screw connections as bolts into threaded holes, assigned materials, and it… worked? Oh I also put the middle of the carriage as stationary/locked in place so it would flex properly. Anywho, to explain the image. The numbers represent factor of safety. The lowest one on the joint is 35. This means that the strength of the part at that point is 35 times higher than the point it would noticeably deflect/fail. Meaning, this part is PLENTY strong. Unlesss I did the sim wrong of course, but I don’t think I did? the deflection is exaggerated just to show what mode of force it is testing. That’s carriages. I really like how these turned out - and most importantly, they only weigh 35 grams each! 35 grams!! Practically nothing."}, {"post_id": 55928, "ts": "2026-07-29T00:00:00Z", "hours": 7.0, "text": "Frame! So, when I left off, we just had extrusions and linear rails. First order of business: connecting those extrusions together! I started with a very simple shape that extends over the horizontal for mounting, and interfaces with the vertical for mounting. After that, I add mounting holes. I am using M5 screws for pretty much all the frame stuff as it consolidates parts and makes assembly easier - I just buy a big bag of M5x10 socket head screws and send it. These corner brackets will be printed out of some sort of fiber filled high performance polymer, like abs-gf. I actually tried a simpler CNC version, but it would’ve been $600 (before tariffs) to get all 12 of the brackets made, so that was a no. Printed it is! I can compensate by sandwiching with lasercut steel. I will show that soon. I then add the 11 remaining brackets via a circular pattern and some copy pasting. My one complaint about copy pasting components, or moving components between parent components, in fusion 360 is that it absolutely nukes your timeline. But I guess if I didn’t use a hybrid design approach it wouldn’t be an issue. Alas, I do hybrid rather than top down (components completely seperate). Meh. Bam, add screws. 6 screws per bracket, 12 brackets… that’s 72 bolts!! Wow. This is gonna be fun to build! Next was working on those aforementioned plate sandwiches. I started out with 1/4 inch steel but ultimately ended up reducing it to 0.12” (practically 1/8”) steel due to pricing. Gotta save money! Anywho, the panels have holes for bolting to the horizontal extrusions with M5 screws as well as bolting into the ends of the vertical extrusions with M8 screws. I also added two more holes to each corner for bolting into the plastic. I am not super worried about this since I am bolting to the aluminum so rigidly, but it does need a bit. I orginally had 4, aka 2 per bracket, but I went down to 1 because of a feature I will be adding later (steel cable eyebolts). Screws!! Keep in mind the bottom is currently identical to this top, so double everything. See! Now let’s do some screw counting again. 30 screws per side, double for top and bottom, that’s 60 more screws, 48 of which are M5. So the count now is 132 screws, 120 of which are M5x10. Surely it won’t get much higher? So, remember how I said this is a steel sandwich? Right now, we only have the outermost panel of the two sandwiches (top/bottom assemblies). We gotta add the second panel of each sandwich! 4 panels total, 2 per top/bottom assembly. The motor modules will be bolting to these panels, so they are pretty important. They also help a lot with rigidity and weight. Making weight go up that is. Heavier is better for frame. These panels are quite similar to the outer panels so I am not gonna show the full process. Just know they have cutouts for the belts to pass through, cutouts for the vertical extrusions, and one big cutout in the middle. I am not totally sure if that middle cutout will be staying but for now it is useful to let me see where I am working. And honestly, the more open the better, as that means I can mess with motors and stuff without dissasembling the frame! More screws!!! These ones are all M5x10. 24 per side, thats 48 total. Add that to the 132 and we now have 180 screws! 168 of which are M5x10. Phew. This is rough. This is what I mean by nuking timelines, ugh. All the copy and paste icons are from organizing the screws in my CAD. Sorting them with their components etc. Absolutely ruins timelines. Last, but certainly not least, I add the eyebolts. These bad boys are for attaching tensioned steel cable diagonals to prevent frame twist. There are 4 of these per side, and this time I mean side of the triangle that is the frame, not top/bottom. So, there is 12 total. You can kinda see the nuts at the bottom - they bolt through the e [Entry truncated]"}, {"post_id": 55929, "ts": "2026-07-28T00:00:00Z", "hours": 7.0, "text": "Ok. I kinda did a lot, but I also kinda only achieved a little. First things first, I made the bed effector setup. This was quick and easy - I reused the CNC machined effector piece so I can save money by buying two of the same part, and then slapped a bed on it. Instead of through bolting this bed I will be attempting to bond mounting points onto the back, much like how LH Stinger does it. We will see if it works! I sure hope so, as it makes using the fiberglass/carbon fiber bed as a print surface way easier. Fairly simple! I need to add a few more screws but I wanted to move on. Next was the arms! This is a super simple part, with a 0.5mm wall stainless steel tube and the 2 cups of the MPJet Joints. This is a 200mm arm length. I would later find out this is wrong… Next was the frame! Boy was this a doozy. I got this wrong a few times. I started at this scale. 800mm verticals and 300mm horizontals, fully 3060 extrusion. I then realized I was 130mm short. How was I 130mm off? Well, lets do the math. 200mm arms + 180mm z height = 380mm needed travel. Double that to 760mm since it’s a double delta. Round up to 800 and that gives me space for idlers in the middle and whatnot. Easy peasy. Except, I forgot to take into account the height of the horizontal extrusions - 60mm plus 60mm, or 120mm total. Add 10mm as a buffer/to get to a nice imperial number, since the seller I am buying frame extrusions from sells in imperial and 930mm is a yard and 5/8 of an inch, which is a nice and easy number. Wait, I forgot to take into account linear rail carriages! That’s 45mm each. So… over a meter now… I somehow ended up at 1120mm. This was a weird number, but I was convinced it was right. Oh right, 1120mm because that lets me use 1 meter rails instead of cutting to 930mm. Easy. It was at this point I realized something felt off. And I was right! I was waaay bigger than I needed to be. How did I manage to get so far off? ’Cause the final frame ended up at 620.725mm (24.438 inches, the closest imperial size they sold to 620mm). Well. I was sizing for 180mm of travel PER SIDE. I only need 90 per side. So yeah, I was almost double what I needed to be. Catching this mistake let me cut down the arms to 100mm and the frame height to the aforementioned 620mm ish. Makes things sooo much nicer and way more rigid than the floppy meter long nonsense. When I tell you this took me 2.5 hours of back and forth math, I am not exaggerating. I went through so many different sizes. I started accounting for rails around the meter mark too, so I had more to adjust than the extrusion length and bleh. Wanted to stick to standard sizes. The final math ended up being: 100mm arm length plus 90 mm z travel plus 45mm carriage is 235mm. Doubled (double delta) is 470mm needed travel. Rounding to 500mm gives me space in the middle for idlers and some overtravel. Add 120 for the frame horizontal heights and you get 620mm. 620mm lets me use 500mm rails! Which are signficantly easier to find and cheaper than meter long rails. Anywho, that’s the final frame, with linear rails added. Now I can finally get to work on the corner joints that actually join the horizontal extrusions to the vertical ones, which will hopefully incorporate some CNC machined parts! Unless it costs too much of course."}, {"post_id": 55902, "ts": "2026-07-27T00:00:00Z", "hours": 2.5, "text": "Alright. Officially kicking this bad boy off. Basically, DoNotDelta V2 for real. Here is my X tier funding pitch: – DDs: DoubleDeltas. DoNotDelta goes big. All new design. Bigger, better, faster. 180mm bed instead of 65mm. Designed to push the speed benefits I initially sought to explore with this kinematic concept. CNC machined parts. Metal panels. Tensioned steel cable diagonal bracing. I learned a LOT building donotdelta. A bit of what works, a whole lot of what doesn’t. All this learning will be carried on through DoubleDeltas. Now that donotdelta works, I feel confident that this motion system is worth exploring further. So, go big or go home. Tech specs: MGN12 linear rails. No more janky linear rods. 2504MAC stepper motors sponsored by LDO High rigidity engineering filament for all parts, Sponsored by Sunlu High performance Duet clone electronics, sponsored by Fysetc. Carbon fiber or thin wall steel arms for high rigidity and low mass (haven’t decided) Custom composite heated bed (carbon fiber or fiberglass) for high rigidity and low mass Dual drive Boombox extruder configured in an ultra short Kevlar-sheathed Bowden setup. Undecided high flow hotend - potentially custom. – So, from that initial pitch, a couple things hav ebeen decided/added on. First of all, after a lot of research, I have decided to use a Mellow Heatcore UHF ALPS for the hotend, with an MZE (meltzone extender). This should grant me plenty of flow, have good rigidity, and importantly, have nozzle probing. That will hopefully make callibration a lot easier overall, something I am looking forward to. That looks like this. I also decided that for the frame I will be using metric 3060 extrusions. This is because I found them for cheap and they are large so they are high rigidity. Paired with MGN12H rails, I should have a really solid foundation to work off of. From there we get stainlesss steel arms and unibody machined effectors (aluminum) for even further rigidity. I am really leaning into rigidity here because I am sick of wimpy printers that can’t handle proper belt tension and have issues with parts flexing (donotdelta…). I actually started working on an effector using SeeMeCNC barbells instead of MPJet joints and lasercut plates sandwiching them, like this: But ultimately I have decided that I will be sticking with MPJet joints and doing a CNC machined effector instead of lasercut plates. I will also likely be doing CNC machined carriages for the vertical towers, but I haven’t decided. Definitely some CNC frame bits. I have the budget (i think), since I already have electronics and motors, which are usually two of the biggest costs. Well, most of the electronics. I need PSUs still. Speaking of PSUs, I actually didn’t mention this in the X tier pitch, but I think I’m gonna do 48v motors. Once again a speed thing. I want to push this bad boy HARD. So yeah. Let’s have fun with this one! No burn out for months like with DoNotDelta."}, {"post_id": 55901, "ts": "2026-07-27T00:00:00Z", "hours": 6.0, "text": "Toolhead! As stated previously, this is made out of CNC machined aluminum. I started with a simple sketch defining a triangle that is circumscribed around a 59mm circle. Why 59mm? That was the smallest number I could get that still left space for the arm joints to do full range of motion without colliding. Weirdly specific, I know. The center hole is for the hotend. That gets extruded, sides get filleted, and the joints get added with tapped m3 holes for mounting. No double shear should be needed since I am mounting to metal. Next was duct. I started by making a rounded cutout in my effector that I want as the start (well, actually midpoint ish, you will see) of the duct and a square I want as the outlet. I moved this square to align with where I want the air to go. The sizing of these was somewhat arbitrary, with the main design constraint being matching a certain cross sectional area - a gentle taper down to 70% of the inlet. So if the inlet is a 17mm circle (19mm hose with a 1mm wall), tahts about 230mm^2 I get to play with. 70% of that is 161mm^2, which is about what my outlet is. You may be thinking, shouldn’t that outlet be a lot smaller to account for the air stream being split into multiple ducts?? No. I will be running 2 ducts. Each duct has its own hose and blower. That’s right, dual cpap. Next is a loft with a curved centerline. This gets me my duct! Then it gets mirrored to the other side of course. At this point my friend was like. You know, having 3 ducts would make it symmetrical/match the delta-esque shaping. Triangles and such. But having 3 CPAP blowers would be silly!! Absurd even!! I love silly. Triple duct, triple cpap. I will NOT be limited by cooling. Next is a little top plate for mounting the hotend. This guy just takes 3x 30mm M3 standoffs, super simple. And it’s all metal, so hopefully rigid af. Another sketch and extrude gets us an extension to the top plate. This is for holding the 3 cpap mounts. One more loft, extrude, and circular pattern gets us the upper section of duct. This is connected in one ring. The whole thing is mounted purely by compression from the upper plate and the effector through the standoffs - no additional hardware. It makes things rather clean. And that’s it! Kinda. I need to figure out how berd air hotend cooling works since I don’t want a fan on the toolhead. But I don’t even know if that takes any additional cad? We will find out! This thing is silly. It’s crazy overkill. It’s bonkers. I love it though. Really sets the tone for the rest of this printer."}]...
|
Title: DoubleDeltas by @parkerrupe | Stardance
De Title: DoubleDeltas by @parkerrupe | Stardance
Devlogs:
Toolhead! As stated previously, this is made out of CNC machined aluminum. I started with a simple sketch defining a triangle that is circumscribed around a 59mm circle. Why 59mm? That was the smallest number I could get that still left space for the arm joints to do full range of motion without colliding. Weirdly specific, I know. The center hole is for the hotend. That gets extruded, sides get filleted, and the joints get added with tapped m3 holes for mounting. No double shear should be needed since I am mounting to metal. Next was duct. I started by making a rounded cutout in my effector that I want as the start (well, actually midpoint ish, you will see) of the duct and a square I want as the outlet. I moved this square to align with where I want the air to go. The sizing of these was somewhat arbitrary, with the main design constraint being matching a certain cross sectional area - a gentle taper down to 70% of the inlet. So if the inlet is a 17mm circle (19mm hose with a 1mm wall), tahts about 230mm^2 I get to play with. 70% of that is 161mm^2, which is about what my outlet is. You may be thinking, shouldn’t that outlet be a lot smaller to account for the air stream being split into multiple ducts?? No. I will be running 2 ducts. Each duct has its own hose and blower. That’s right, dual cpap. Next is a loft with a curved centerline. This gets me my duct! Then it gets mirrored to the other side of course. At this point my friend was like. You know, having 3 ducts would make it symmetrical/match the delta-esque shaping. Triangles and such. But having 3 CPAP blowers would be silly!! Absurd even!! I love silly. Triple duct, triple cpap. I will NOT be limited by cooling. Next is a little top plate for mounting the hotend. This guy just takes 3x 30mm M3 standoffs, super simple. And it’s all metal, so hopefully rigid af. Another sketch and extrude gets us an extension to the top plate. This is for holding the 3 cpap mounts. One more loft, extrude, and circular pattern gets us the upper section of duct. This is connected in one ring. The whole thing is mounted purely by compression from the upper plate and the effector through the standoffs - no additional hardware. It makes things rather clean. And that’s it! Kinda. I need to figure out how berd air hotend cooling works since I don’t want a fan on the toolhead. But I don’t even know if that takes any additional cad? We will find out! This thing is silly. It’s crazy overkill. It’s bonkers. I love it though. Really sets the tone for the rest of this printer.
Alright. Officially kicking this bad boy off. Basically, DoNotDelta V2 for real. Here is my X tier funding pitch: – DDs: DoubleDeltas. DoNotDelta goes big. All new design. Bigger, better, faster. 180mm bed instead of 65mm. Designed to push the speed benefits I initially sought to explore with this kinematic concept. CNC machined parts. Metal panels. Tensioned steel cable diagonal bracing. I learned a LOT building donotdelta. A bit of what works, a whole lot of what doesn’t. All this learning will be carried on through DoubleDeltas. Now that donotdelta works, I feel confident that this motion system is worth exploring further. So, go big or go home. Tech specs: MGN12 linear rails. No more janky linear rods. 2504MAC stepper motors sponsored by LDO High rigidity engineering filament for all parts, Sponsored by Sunlu High performance Duet clone electronics, sponsored by Fysetc. Carbon fiber or thin wall steel arms for high rigidity and low mass (haven’t decided) Custom composite heated bed (carbon fiber or fiberglass) for high rigidity and low mass Dual drive Boombox extruder configured in an ultra short Kevlar-sheathed Bowden setup. Undecided high flow hotend - potentially custom. – So, from that initial pitch, a couple things hav ebeen decided/added on. First of all, after a lot of research, I have decided to use a Mellow Heatcore UHF ALPS for the hotend, with an MZE (meltzone extender). This should grant me plenty of flow, have good rigidity, and importantly, have nozzle probing. That will hopefully make callibration a lot easier overall, something I am looking forward to. That looks like this. I also decided that for the frame I will be using metric 3060 extrusions. This is because I found them for cheap and they are large so they are high rigidity. Paired with MGN12H rails, I should have a really solid foundation to work off of. From there we get stainlesss steel arms and unibody machined effectors (aluminum) for even further rigidity. I am really leaning into rigidity here because I am sick of wimpy printers that can’t handle proper belt tension and have issues with parts flexing (donotdelta…). I actually started working on an effector using SeeMeCNC barbells instead of MPJet joints and lasercut plates sandwiching them, like this: But ultimately I have decided that I will be sticking with MPJet joints and doing a CNC machined effector instead of lasercut plates. I will also likely be doing CNC machined carriages for the vertical towers, but I haven’t decided. Definitely some CNC frame bits. I have the budget (i think), since I already have electronics and motors, which are usually two of the biggest costs. Well, most of the electronics. I need PSUs still. Speaking of PSUs, I actually didn’t mention this in the X tier pitch, but I think I’m gonna do 48v motors. Once again a speed thing. I want to push this bad boy HARD. So yeah. Let’s have fun with this one! No burn out for months like with DoNotDelta.
Ok. I kinda did a lot, but I also kinda only achieved a little. First things first, I made the bed effector setup. This was quick and easy - I reused the CNC machined effector piece so I can save money by buying two of the same part, and then slapped a bed on it. Instead of through bolting this bed I will be attempting to bond mounting points onto the back, much like how LH Stinger does it. We will see if it works! I sure hope so, as it makes using the fiberglass/carbon fiber bed as a print surface way easier. Fairly simple! I need to add a few more screws but I wanted to move on. Next was the arms! This is a super simple part, with a 0.5mm wall stainless steel tube and the 2 cups of the MPJet Joints. This is a 200mm arm length. I would later find out this is wrong… Next was the frame! Boy was this a doozy. I got this wrong a few times. I started at this scale. 800mm verticals and 300mm horizontals, fully 3060 extrusion. I then realized I was 130mm short. How was I 130mm off? Well, lets do the math. 200mm arms + 180mm z height = 380mm needed travel. Double that to 760mm since it’s a double delta. Round up to 800 and that gives me space for idlers in the middle and whatnot. Easy peasy. Except, I forgot to take into account the height of the horizontal extrusions - 60mm plus 60mm, or 120mm total. Add 10mm as a buffer/to get to a nice imperial number, since the seller I am buying frame extrusions from sells in imperial and 930mm is a yard and 5/8 of an inch, which is a nice and easy number. Wait, I forgot to take into account linear rail carriages! That’s 45mm each. So… over a meter now… I somehow ended up at 1120mm. This was a weird number, but I was convinced it was right. Oh right, 1120mm because that lets me use 1 meter rails instead of cutting to 930mm. Easy. It was at this point I realized something felt off. And I was right! I was waaay bigger than I needed to be. How did I manage to get so far off? ’Cause the final frame ended up at 620.725mm (24.438 inches, the closest imperial size they sold to 620mm). Well. I was sizing for 180mm of travel PER SIDE. I only need 90 per side. So yeah, I was almost double what I needed to be. Catching this mistake let me cut down the arms to 100mm and the frame height to the aforementioned 620mm ish. Makes things sooo much nicer and way more rigid than the floppy meter long nonsense. When I tell you this took me 2.5 hours of back and forth math, I am not exaggerating. I went through so many different sizes. I started accounting for rails around the meter mark too, so I had more to adjust than the extrusion length and bleh. Wanted to stick to standard sizes. The final math ended up being: 100mm arm length plus 90 mm z travel plus 45mm carriage is 235mm. Doubled (double delta) is 470mm needed travel. Rounding to 500mm gives me space in the middle for idlers and some overtravel. Add 120 for the frame horizontal heights and you get 620mm. 620mm lets me use 500mm rails! Which are signficantly easier to find and cheaper than meter long rails. Anywho, that’s the final frame, with linear rails added. Now I can finally get to work on the corner joints that actually join the horizontal extrusions to the vertical ones, which will hopefully incorporate some CNC machined parts! Unless it costs too much of course.
Frame! So, when I left off, we just had extrusions and linear rails. First order of business: connecting those extrusions together! I started with a very simple shape that extends over the horizontal for mounting, and interfaces with the vertical for mounting. After that, I add mounting holes. I am using M5 screws for pretty much all the frame stuff as it consolidates parts and makes assembly easier - I just buy a big bag of M5x10 socket head screws and send it. These corner brackets will be printed out of some sort of fiber filled high performance polymer, like abs-gf. I actually tried a simpler CNC version, but it would’ve been $600 (before tariffs) to get all 12 of the brackets made, so that was a no. Printed it is! I can compensate by sandwiching with lasercut steel. I will show that soon. I then add the 11 remaining brackets via a circular pattern and some copy pasting. My one complaint about copy pasting components, or moving components between parent components, in fusion 360 is that it absolutely nukes your timeline. But I guess if I didn’t use a hybrid design approach it wouldn’t be an issue. Alas, I do hybrid rather than top down (components completely seperate). Meh. Bam, add screws. 6 screws per bracket, 12 brackets… that’s 72 bolts!! Wow. This is gonna be fun to build! Next was working on those aforementioned plate sandwiches. I started out with 1/4 inch steel but ultimately ended up reducing it to 0.12” (practically 1/8”) steel due to pricing. Gotta save money! Anywho, the panels have holes for bolting to the horizontal extrusions with M5 screws as well as bolting into the ends of the vertical extrusions with M8 screws. I also added two more holes to each corner for bolting into the plastic. I am not super worried about this since I am bolting to the aluminum so rigidly, but it does need a bit. I orginally had 4, aka 2 per bracket, but I went down to 1 because of a feature I will be adding later (steel cable eyebolts). Screws!! Keep in mind the bottom is currently identical to this top, so double everything. See! Now let’s do some screw counting again. 30 screws per side, double for top and bottom, that’s 60 more screws, 48 of which are M5. So the count now is 132 screws, 120 of which are M5x10. Surely it won’t get much higher? So, remember how I said this is a steel sandwich? Right now, we only have the outermost panel of the two sandwiches (top/bottom assemblies). We gotta add the second panel of each sandwich! 4 panels total, 2 per top/bottom assembly. The motor modules will be bolting to these panels, so they are pretty important. They also help a lot with rigidity and weight. Making weight go up that is. Heavier is better for frame. These panels are quite similar to the outer panels so I am not gonna show the full process. Just know they have cutouts for the belts to pass through, cutouts for the vertical extrusions, and one big cutout in the middle. I am not totally sure if that middle cutout will be staying but for now it is useful to let me see where I am working. And honestly, the more open the better, as that means I can mess with motors and stuff without dissasembling the frame! More screws!!! These ones are all M5x10. 24 per side, thats 48 total. Add that to the 132 and we now have 180 screws! 168 of which are M5x10. Phew. This is rough. This is what I mean by nuking timelines, ugh. All the copy and paste icons are from organizing the screws in my CAD. Sorting them with their components etc. Absolutely ruins timelines. Last, but certainly not least, I add the eyebolts. These bad boys are for attaching tensioned steel cable diagonals to prevent frame twist. There are 4 of these per side, and this time I mean side of the triangle that is the frame, not top/bottom. So, there is 12 total. You can kinda see the nuts at the bottom - they bolt through the e [Entry truncated]
Carriages! Okay, these had me stumped for a while. I spent hours (that I am not logging) staring at what others have done, staring at my own CAD, staring at previous designs I have worked with. And I came to a conclusion - I don’t like belt paths where the belt is perpendicular to the carriages. I just don’t. It is so annoying to work with. This is what I mean by perpendicular by the way, sketched over a basic flat carriage I had thrown together. This carriage is what I spent most of my time staring at. Because, somehow, I needed to add belt clamps to this. I hated it. There wasn’t a way I could think of to do it CNC, and that was something I really wanted to do for this project (cnc parts). So, I wanted the belt parallel to the carriages (aka rotated 90 degrees). This would be way easier to clamp the belts and allow for much lighter carriages. This is what I came up with. CNC machined unibody with a flat lasercut plate as a belt clamp. The plate is sandwiched between the carriage and linear rail carriage. So, I just crank down on the 4 mounting screws and it grabs the belt. The belt tooth geometry is based off of Ruiqimao’s Carveoff belt clamps, as those are proven working for 9mm tension. A friend - well actually three friends - then suggested one change, which makes the carriages look nicer and way stronger. Diamond carriages! I think this looks awesome. Now, I keep having people telling me to double shear the ball joints. I don’t think this is necessary. But, they didn’t believe me. So, I decided to try and run a fusion 360 static force sim! First, I calculated the max load on the carriages using a [tool from my friend Deadlock]. This gave me: A max of 30 ish newtons for 500k accel. Not bad. I will be simming with 50 newtons just to be special and over the top. After messing with the sim for a while, I got this result. Setting this up was weird and I have no idea if it is correct, but basically I just defined the screw connections as bolts into threaded holes, assigned materials, and it… worked? Oh I also put the middle of the carriage as stationary/locked in place so it would flex properly. Anywho, to explain the image. The numbers represent factor of safety. The lowest one on the joint is 35. This means that the strength of the part at that point is 35 times higher than the point it would noticeably deflect/fail. Meaning, this part is PLENTY strong. Unlesss I did the sim wrong of course, but I don’t think I did? the deflection is exaggerated just to show what mode of force it is testing. That’s carriages. I really like how these turned out - and most importantly, they only weigh 35 grams each! 35 grams!! Practically nothing.
Motor assemblies!! These motor assemblies are required to get horizontal belt pathing without moving the motors outside of the frame. You can see my preliminary sketch here. I will be using bearings and live shaft idlers to offset the motors about 72mm. Now, moving the motors out of the frame would be a 45mm offset. So, the difference is about an inch. That’s really not bad! I am willing to accept that. Anywho, I take that preliminary sketch and use fusion’s Derive tool, which I just discovered, to move this design into a seperate document. That way we can keep the timeline of this part and the overall printer a bit cleaner. A bit. I am using 605 bearings basically everywhere here since they are nice and beefy for high tension 9mm belts. You can see them on either end of the pulley on the right as well as standalone slightly to the upper left of that pulley as an idler on the back of the belt. This setup mimics having the motor aligned with the carriage path without it actually being, as otherwise the motor would hit the frame. I always like to start with doubleshear on the motor. No particular reason, that’s just where I start. From there it just gets extended. Then I add the 30mm shafts for the idlers and some countersinks for the motor screws! That way I don’t need super long motor screws. I actually then extended up one end. I figured I can use this part to help locate the linear rail! So this print extends to exactly the height the linear rail needs. Since there is one on both top and bottom, it will sandwich the rail and align it. From here, I decided to challenge myself a bit. I wanted this part to be organic! Not as blocky. So, I made this nice spline! This curve is pretty nice looking and is just defined by some random points and the idler bores. With a few fillets, you get a pretty nice result. Slight issue, however, is that this part is centered on the pulleys being centered. Which is fine, except that the pulleys have hubs. You can see those hubs here. So the actual belt is currently not centeed. This is a relatively easy fix! The one big constraint is that the end of this part, where the belt is coming out and the highest point of the part, needs to be 30mm wide. This is because my vertical extrusion is only 30mm wide. So, if it is wider, it will hit the horizontal extrusions of the frame. With a couple extrudes here and there, some press pulls, blah blah, we get this!! The part looks super organic with the recesses on the sides and whatnot. Those are mainly there to provide enough material for the bearing but still keep the part thin enough at the end to fit between the horizontal parts of the frame! And here they are in place in the frame. Currently they are mounted by 3 screws bolting up through the bottom plate and no other mounting. I may change that a bit though… Like, I could bolt to the extrusions, or I could bolt to the top plate of the frame sandwich, all for higher rigidity! For now, I am done though. I am pretty happy with this part as is.
Motor module 2 electric boogaloo?? Ok so, a friend told me to make some motor modules out of sheet metal. This is a good idea! Unfortunately I think it is out of budget… but it is nice to have around!! Anywho. Start with the same layout as before. Create a motor side plate. This plate is not thick enough for the bearing on its own - it will need stacked with another. That makes these motor modules 3 plates each. 3 times 6 is 18 plates total. Youch, my wallet. Extend it and create a matching idler side plate. This plate can be thick enough for the bearings on its own, so it won’t need stacked. This is good for budget. There’s that second stacked plate. Each thin plate is 0.1”. The thick plate is, you guessed it, 0.2”. From there I made these simple printed part structural spacers. These are designed to be minimal at the top so I can still hopefully route belts. I think it will be difficult to route belts in this design no matter what I do, but this could help. Last, I just add screws and nuts that go through the whole sandwich. This is the easiest and most rigid way I could think of assembling. And I think it turned out really nice! It’s just… these would add $200-$250 to my budget… I think I would rather bulk up the printed part. So that’s what I will do next entry - bulk up the printed version! It is such a small part that I think it is fine - end to end, this thing is like, 110mm. So it really shouldn’t matter much. Actually, one last thing. This cutout will help a ton with belt routing. Ok that’s all for real this time.
Bulking up the printed motor mounts because sheet metal is too expensive. Alright, so. Sheet metal adds about $250 to my costs, so I cannot do sheet metal for these motor assemblies. But that’s fine, I don’t need it. I started by going back to the blocky version. I extended out the tall bit so that there is more material over the bearing and idler shaft for strength. Then I actually started making the walls thicker for more material/bracing. Because the end of the part is constrained to 30mm, I need that little divot on the front right. I did the same to the opposite side and brought the curves back! These curves look pretty nice. They start out matching but then the front one diverges into its own thing. It was at this point I realized my walls were now thick enough to utilize the 4th screw hole on the motor. This will help a lot with making everything more rigid. On the initial version I wasn’t able to use this hole because I was optimizing for the entire part to be 30mm wide rather than just the end of it. This would have been fine, but this new bulkier appraoch is just better. Lastly, I added mounting. I added one M5 screw on the rear vertical wall that will actually use a T nut to bolt to the vertical extrusion, while I also added top holes (and unseen bottom holes) for M5 heat inserts for the top/bottom plates to bolt to. This forms a printed and metal sandwich, which is great for rigidity. Integrated into the assembly, it looks great! It kinda bothers me that the screw holes are off center but I might be able to fix that later. That’s motor assemblies done. Yay! I just need to do idlers/tensioners and the “core” of the printer will be done.
Oh. My. Gosh. I made the sheet metal motor mounts affordable!! I just had to switch all the lasercut parts from powdercoated steel to uncoated 5052 aluminum, and do some trickery to get the motor mounts down to 2 plates instead of 3. Badda bing badda boom, it’s somehow super affordable now!! Like, super affordable. Especially since I have a 50% coupon. This means I can use more lasercutting elsewhere! Like… an electrical panel!! Anywho, I decided to fully redesign the motor mounts. I kinda had to since to get them to fit as 2 plates instead of 3, I needed to move the motor back 5mm and out like 2.5mm ish. Which isn’t bad. Started the same as last time with a pile of hardware, just with slightly different spacing. Once again, I like to work from the motor mount. I really don’t know why I do this - I should be doing the entire plate in one sketch so that my timeline stays cleaner and they are easier to edit, but eh, old habits die hard. Turn it into a full plate by adding the bores for bearings and pins (which are currently oversized, oops). Then I double it for the second plate. Just a simply copy and paste. Now I fix the bores and widths on the plates. These are 0.188” thick 5052 aluminum. I need to double check how I should be tolerancing my bores so that they work as interference/light press fits. Right now they are just exactly matching the part OD for the bore ID, which I think might be fine because of laser kerf? Dunno. I will ask my brother what he did. I also shortened the plates by removing some from the side that is against the vertical extrusion. Or, correction, WAS against the vertical extrusion. Because of how far off center these plates are, I needed to just have it not go up against the vertical otherwise it would hit the horizontals. Shifting it to be centered would take a lot more offseting of the motor, which is something I really want to avoid. Next we get a big printed spacer. This serves as the buffer between the two plates and is also how the modules will mount, with heat inserts in top/bottom (m5 of course). Because of that part, we also need these cutouts in the sides of the plates. These make it so that I can actually still manage to route the belts despite them being somewhat encased in material - this un-encases them. Hopefully it is enough to be able to route the belts. I think it’s gonna be a bit tight, expecially once installed in the frame, but it should be possible. Hopefully not too painful. We will find out! You can also see I added mounting holes in that operation. Same cutting op, just added a bunch of M3 holes. These either thread into the motor or thread into the back plate. Since the plates aren’t getting powder coated, I am willing to deal with tapping them now. Add some screws in the sides and screw holes on top/bottom and we are done with the new motor modules! The mounting holes on top are identical to those on bottom. They are off center so that they are centered with the belt path and thus the rest of the printer. Helps things look nicer from the outside. And here they are integrated into the machine! Gosh, this looks awesome, and will be incredibly rigid! In fact, this means that the only part of my motion system that isn’t metal (or, at least, structurally metal) will be the idlers/tensioners! And even then, I might be able to do something about that… Maybe. Gonna mess around with lasercut designs, CNC designs, and even SLM designs. We will see how this goes! I love how these turned out and I love even more that I managed to fit it in my budget. This is so exciting!!
Idlers! I started out with a simple sketch that shows part of the extrusion profile and the linear rail profile, then used that to align my idler hardware (two bearings, a pulley, and a shaft). From there, I made a sketch for the mounting block. This would wrap around to the other side aswell, bolting onto both sides of the vertical extrusion and holding out the tensioner. I guess I should talk about my tensioning method. Basically, I am going to have two idlers “floating” in the middle of the frame vertically. One for the top belt, one for the bottom. These then get pulled towards eachother by bolts and nuts, pulling tension on both top and bottom at once. I think it will work? The only issue is any differences in assembly or belt length will render this useless. Once tension is pulled, the side bolts get clamped down hard onto the vertical extrusion. Easy peasy. So anyways, the body gets doubled to the other side and connected at the middle. I then added nut recesses so that I don’t need to hold the nut while I pull tension, and flattened one side of the roundover on the end. This would be the mating surface of the two idlers, so it makes sense to be flat. This gets mirrored to the other side along with the hardware. Boom, now we have two idlers that meet at the middle. A couple fillets here and there, assigning materials, and adding bolts gets us to this result. I think this turned out really nice! I actually initiallly had some issues with where my mounting holes were and how long the idler was. Turns out I added 8mm somewhere I shouldn’t have. Took a minute to figure out where the discrepancy was but it was an easy fix. And with that, we can install it in the cad! Looks great! Okay, spoiler. I immediately hated it. I don’t trust that I can build both sides identically and I don’t think I can easily get enough travel on the tensioner. Plus, the amount of tension directly correlates to how far my effectors can move instead of that being a fixed value. That is so stupid. Ugh. Back to the drawing board. Literally, let’s make a sketch. So this is my idea. Some sort of mechanism to pull up on the upper span of belt so that I can have stationary idlers. I think I can pull something off. It would integrate with the motor module well I think and lets me make the tensioner and idlers out of sheet metal - so, the entire belt path is sheet metal. The whole thing! That is so freakin cool. This time I actually started with making a sketch of one of the side sheets. The assembly would overall be similar to the old one, except there wouldn’t be anything bridging the gap between the two sides besides the idlers. The side pieces would also be further apart to accomodate for the size of the aluminum extrusions. This just meant I would need a longer shaft. That’s fine. This gets extruded to create the sheet. These are 3/16” thick aluminum sheets that will be lasercut by Oshcut (not sponsored, just cheap). Then I literally just duplicate it and assemble everything. 4 bearings, 2 pulleys, 2 35mm long 5mm dowels, 2 9mm spacers, 2 4mm spacers (both printed), 4 m5x10 bolts, and 2 sheets. All assembled into the double idler! Oh there will also be 4 T nuts for mounting but I am not cadding those as my PC already doesn’t like how many components are in this assembly and I would have to align each and every one by hand. Integrated into the cad, they look awesome! Gosh this printer looks good. Anywho, we have one thing left - the motor side tensioner. This is relatively straight forward. I started by just getting the tensioner hardware into place. Then, I added side plates that would make up the tensioner body. These are super simple and will just be held together with 2x M3 bolts and a printed part. Of course, the motor module side plate needs a cutout for the idler! This cutout is not only for clearance, but th [Entry truncated]
I spent 2 entire hours putting the full printer cad together. It looks so good! Parker, how could adding just the gantries take 2 hours, you ask? Well well well. Basically, each ball joint had to be defined as a ball joint in fusion with proper motion limits and whatnot. And fusion does NOT like this. Fusion crashed 3 times. It errored out unrelated things for no reason more times than I rememeber. It took multiple MINUTES to load each ball joint at times. It was pure torture. But I got it done! It’s pretty cool, I defined all the linear rails as sliders and stuff and so I can literally drag around the effectors and they move like a delta should. One note, the bed has been lowered to 160mm instead of 180mm. This is because of some future plans and also because it just feels better in terms of proportions. It looks so nice now! Oh, and I had to make the printer taller. We are now using 600mm rails instead of 500mm as my arm length was incorrect. Turns out, you can’t just optimize for a 90mm gantry, because the quantum delta side needs way more travel than that. It was actually pretty funny when I first put the cad together with the short arms. Squatted delta. I think it’s funny. Anywho, I got it all done eventually and got fusion to stop crying about it (mostly). It does take noticeably longer to open the document now and timeline changes take a significant amount of time to fully propagate through all the joints. But, because I had to increase the arm lengths, I suddenly didn’t have enough travel for the carriages. Hence why the frame is bigger now....
|
1792536560.9999394
|
1793141360.9999394
|