June 21, 2025
add new shop items
worked on a new search function for category based searches and qualifiers on users.
updated to hc/ai SSE spec, works without #24 being merged. SSL ERROR FIXED !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
worked on hackclub/ai compatibility, currently borked, waiting for merge on hackclub/ai. I migrated to tools insstead of my shitty parser, currently broken due to hc/ai tool ssupport.
Improved search sorting; first fuzzymatch then sort by levenshtein distance. Before it was sorted by leaderboard rank.
retrained model and downloaded latest SoM data. I also completely automated my build process, I can run the rebuild.nu
script and it will:
1. download new SoM data
2. retrain the model
3. write the new metrics to the index.html
4. compile sonai-metrics
5. compile sonai for wasm
6. open vite for testing
Everything is 100% reproducible since all RNG is seeded, the same data will give the same WASM, Metrics, and sonai crate.
I added all the new shop items from the BM and regular normie shop, i fixed the lorenz graph to just exclude negative shells from total shells, so the +balance is still fine. I fixed the tooltip on the tx type pie chart, it doesn't glitch around anymore.
SSL is confirmed not fixed, I did change it to use the new API proposal to avoid some SSL issues by excluding the <think> data from the response. It can generate full small pages now, I also prompted it to output minified output .
got it working on nest, added a UI to homepage.
MVP. I decided to use tokio-postgres
, axum
, and bb8
for this project. Axum handles the webserver, tokio-postgres
and bb8 handle postgres and connection pooling. I used the shields
library to create badges.
You can use this API on your SoM profile with custom CSS! See this example. Note: You must get a UUID from the demo link before you can use this.
h1.text-2xl > a:nth-child(1) > span:nth-child(1)::after {
content: "";
display: inline-block;
width: 3em;
height: 1em;
background: url('LINK YOU GOT FROM API') no-repeat center center;
background-size: contain;
vertical-align: middle;
}
Demo is available now.
pvbc, or "Page View Badge Counter" is a little API which gives a shields.io-esq badge with a page view count!
Add reverse shop lookup to see which users bought what items!
finally got it running on nest again! SSL is an issue which will not be fixed by HC, so i can't fix it :(
worked on more metrics. NOTE: did not publish yet
I added more shop items and improved the zooming performance on the shell-usd graph, i also fixed a bug on the user tx page where hovering would show the wrong dot. this is all in an effort to finish recharts v3 migration.
migrated to recharts v3, all of the graphs are BUTTERY SMOOTH now.
Use the new OpenAI API options from hackclub/ai, made mobile support better by adding a new tall:
TWCSS variant to match horizontally oriented mobile screens. TOOD: implement mobile dragging on cards.
worked around SSL error by using /no_think
in prompts. This does not work every time.
add cachet for <unknown> usernames; fix hydration error; update prices and shop for BM items; exclude negative balances from lorenz curve;
use the same dist fn across the app; improve fingerprinting lists; fix irr perspective bug where parts of words would count; add the rest of the unicode dashes (bad ones); tune model for a better split, not just 50% each time; fetch new data and retrain; add a new metric display trait for training. bumped versions and crates.io published. I also fixed the date detection ahocorasick.
add: mention links for SE and sonai; reduce lb on / to 10; powered by parth, not explorpheus; refresh every 5 minutes; AI%; AI
% upper quartile mean; market i/o looks better on small screens now; shell-usd is highlight zoomable; add devlogs to user page
I ACTUALLY GOT IT TO WORK!!! STREAMING XML IS REAL!
I am working on implementing a new XML parser to fix the bugs with the old one, I think it works?
Fix the header on the site to represent current stats
changed the distance formula, added 4 more model parameters, and retrained a few times. this required a total rework of the previous system. AI% Up to 6!
published new version, dealt with the HC API SSL Outage by adding retries to the fetcher.
Worked on fixing the XML parser. Figured out hackclub's SSL is all borked and that was why the AI was giving half-complete responses. Cannot be fixed by me, submitted a report!
Worked on fixing the XML streaming for the new ai.hackclub.com model.
fixed ai, as of now, hackclub's AI model uses qwen32b reasoning. I added parsing support for <think></think>
tags, which removed the clutter. Parsing regex was also fixed and it shows Thinking... when reasoning. This new model comes with it's own new personality... Have fun!
fixed an audio bug with the roulette gun. OK I'm actually gonna add mobile support now!
Added a project list to user pages. Caching now uses ISR so it properly revalidates every 5 minutes!
I revamped the entire repository structure, added a license, and published the crate for human consumption!
Added license and wrote a new readme. Fixed many bugs with the parth api wrapper
I combined the explorpheus and slack API into Parth's API! Caching is no longer an issue I face, and the data is instantaneously loaded & prefetched! Parth's API handles: ranking, parsing, transaction cumulative history, profile pics, usernames, and more all in ONE api call! (before I had to do all of that!)
Check out Parth's API here: https://exploresummer.livingfor.me/v1/docs (i was not encouraged to say this)
Added more metrics: hashtags and labels. Certian users post devlogs with #NextJS2025 like wtf. Additionally, AI's do things like:
Project description:
Devlog #1:
I added:
These are all catched
I trained a new model! This new iteration is based off of these brand spankin new f64
features: emoji_rate, buzzword_ratio, markdown_use, irregular_ellipsis, rule_of_threes, devlog_day_count, html_escapes, irregular_quotations, irregular_dashes
. I reworked the WASM compat layer, it now outputs a JsValue which is comprised of the aforementioned features, as well as the centeroid distance and certainty for each cluster, this allows the web ui to display how confident the model is that the specified devlog is either AI or Human. I now lazy load the model so the WASM module does not re-decode the binary each time it is run, this is actually not even that much faster since the model is so small. Text metrics are now LIGHTNING FAST, as regex has been completely eliminated from the pipeline, resorting to summing str::matches
and Iter::count()
for a fast text matching algo. Markdown stats now only flag a subset of MD, lists using -
are now allowed. I added a buzzword list like sleek ui, interactive experience, etc. You get the point lol. The model is now trained on project descriptions as well as the original devlogs. I have abstracted the page fetcher into a trait, which saved maybe 15 lines of code :skull:
Add a demo, finished project! Refinements needed.
I'm so fucking proud of this, but I still need to yap about it! I managed to train an AI model which is only 255 bytes big. It classifies a devlog as AI or NOT AI. Cluster 1 means AI , and cluster 2 means NOT AI. The model first measures 14 metrics from every devlog on SoM, then it trains a KMeans model on it, normalizes the vectors, and separates it into 2 distinct categories. The category with the most emojis (common AI metric) is the AI category. I tested this on many examples from real-world devlogs, comparing it to the output of GPTZero, and they matched up! I also got chatgpt to generate a few devlogs, they were all AI! Next, I will try to get this shit to run inside of a browser. Wish me luck! Currently SoM is 13% ai btw.
Uhh, I did the classification.
It's bad...
human=6886, ai=15619, human%=30, ai%=69
Working on classifier, so far I have classified a few sets of vibecoded text from a few metrics like emojis em-dashess etc.
Working on embedding all of the devlogs, projects, and users. So far I have successfully embedded every devlog.
<- 7% chance that one is AI -> suprisingly, not alot! I measured the heuristics of text and trained a KMeans model to check if text is AI.
add usd-shell market chart and improve speeds :hyper:
Implement a new system on user pages for shop items bought per user! Search is now fuzzy.
Added new user-based pages to inspect personal and public balance over time! Working on search
improved index load times by 5x by omitting tw classes from each <li> and instead emitting them before with a <style> tag! This also fixes some bugs w/ the generator. I fixed a bug where pages would not generate the <code> tags properly to fmt it to output along w/ thonking data. Screenshot is 3.7MB and doesn't even include the whole list :O
Added a better shell -> usd estimator with a linear regression and interpolation map. This seeks to improve USD prices across the board. I also revamped the shop estimator, I can now say it accurately predicts shop purchases, and can be used as a data source. I added +-Change% tickers to the Market I/O Graph.
calculateMetrics
to include shop metrics based on payout dataMonetaryValue
UserMetrics
and MarketMetrics
Implement better leaderboard (sorry cyteon), and begin work on shop reverse calculations.
Add metrics i/o chart for net worth and transaction values over time. Added lorenz graph and gini value.
the somconomy is booming. this includes comprehensive market statistics on fancy interactive graphs!
feat: add chemical reaction and roulette
-- chemical reaction
Spreading substance that acts as an empty cell but grows and consumes everything that touches it
-- roulette
what it sounds like, 1/6 chance for you to die, 1/6 chance for the AI to die. includes fun gun sounds!
-- details
quality: remove allowedDevOrigin
packages: upgrade all
remove: hardcore dev test page
add: help page for new features
change: lb TOP=100
refactor: filters and backend for card position validity.
refactor: split main game states into many components
fix: extend on static card is properly animated
change: card distribution sampling, you get hard cards more often with a base unlock of 1
impl: forcedwinner mechanic
fix: make prompt use human readable IDs
refactor: move audio equipment outside of the zustand store
add: wait until finished option for audio
refactor: audio is now async
fix: user-ui now waits for card calculations and debounces additional requests
fix: newboard RNG is now actually 1/5
fix: reduce volume on explode.opus
I changed all of the .wav and .mp3 files into .opus, which is much better for streaming and binary size. this improved the audio system load time by 10x!
add sfx: lose, explode, place, tie; link sfx(lose, explode, place, tie) -> game loss, interactive click, game place, game tie
I added a new sound effect! When placing MYTHICAL grade cards a new sfx plays. I refactored all from "\.*/"
into from "@/{lib,components}/*"
for imports. Lint, cleanup.
I added Win SFX! I also finished rewriting the audio system! The onWin system is now much cleaner on the client & server only issuing API calls when needed, i also fixed baby & infant mode, you can win now :skull:
Added free mode, reworked the audio system, visual bugs fixed!
I made the entire visual system work in layers of filters and finally mapped out every z-index that was used so no layer issues should happen! I blurred the bg of the how2play page so you could read the text.
volume control is now sqrt instead of linear, this mimics the human ear's perception of audio.
Added more credits for audio. began work on SFX!
CAN YOU HEAR THE MUSIC? I added a new playlist of one song to TTFU! Clicking anywhere will activate it. I need to fix a bug where it stops playing after you win, location.refresh nukes all my fuckin state. The song is BALATRO - [N163] by @LucasPucas. I did request to use it.
Spent too much time doing this :skull:
I redesigned the logo, readme, and documentation for the project. I spent considerable time working on refactoring the github page of this project. I commited a LICENSE to the repository, which I mistakenly forgot to do, I chose the strong copyleft AGPL-3.0 license for my project as it requires sharing. I added the hackatime badge to the respository.
I finally verified that opengraph works, you can now share links in discord/slack(not really, it cached it)!
Redesigned the logo because the AI one sucked.
fix fixed positioning with CRT filter and mouse; fix HOW 2 PLAY; fix font order; make 123 medals bigger; add taunt anim; fix auth buttons on small s
creens; pointer based card drops; hitbox highhlight on board; highlight X and O in AI responses
Configured open-graph and added a new icon + banner!
Added labels to the difficulty slider, added AI expreesions, you can talk back now!
I removed rust-ls then added it back because it broke the completions endpoint :skull: HTTP/2 is now removed as caddy handles that. AI Also made a final logo!
fixed some generation things in the prompt, the model is more effective at linking pages together now. Might add external images soon, or even external JS. Still deciding how bad this would be.
Manually cleaned up some NSFW before the filters, people are too fucking odd for my service.
I made the 64 URL length limit now 72. I also migrated to HTTP/2 and made agar.io!
I rewrote the backend with axum, a more maintained and newer framework than rocket. I hope this speeds things up a bit!
Implemented a new ripgrep powered search function to search the index by path name as well as file content. Fixed the CONTENTREJECTED bug, it now properly shows CONTENTREJECTED when the content was rejected instead of outputting nothing.
Implemented a new streaming XML parser to take output in the form of <code>...</code>
. It does not return any data until the first code tag and only stops when the last one is present, not yielding any of the tags.
I greatly improved the system prompt and the AI's ability to make pages link to other pages, now every button link and menu has a point! No more href='#'
s
I also added a hard path limit of 64 characters in order to prevent platform abuse.
Added a new landing page, as well as more AI improvements.
improved system prompt, uses 3rd person augmentation, offloads generation to another thread so closing the tab does not stop it, give the AI the current date. Added experimental sandboxed support for JS, let's hope my users don't do anything horrible with this one.... again....
Added support for tailwindcss! Implemented content filters through a CSP and the nest code of conduct. The AI has been prompted to not produce any harmful content, in addition it can no longer link to external assets. I may change this to allow images.
I started work on the initial version, currently it can generate entire webpages by domain and it can write to the filesystem. It can read files that relate to the current work, ie it can make an index.html, then write CSS for it based off of the index.html. The browser automagically requests linked CSS which gets put into a generation queue.
The internet, except everything is vibecoded. Append any url to the end of the demo link (remove http(s)://) and watch an AI generate it live! Uses `https://ai.hackclub.com`!
MINIMUM. VIABLE. PRODUCT!
After just over 50 hours, I did it! The game is complete-ish!
In the last 3h 22m and 41s I added a new difficulty engine which samples cards based on a custom RBN function: max(b, 1 + floor(b + r(x - n)))
R = Rate/round, B = Base weight, and N = Unlock round
This formula has been adjusted to every card and difficulty. Especially HARD MODE. Which is now f*cking hard (I have not won, best I get is a tie)
FOR THE SOM PEOPLE: I added a HARDCORE mode. By default swearing is disabled. FOR THE STRONG-WILLED: Enable it on the home page :)
Mobile support is a negative, but the game works and it's kinda fun!
Thank you for all the support while making this!
Add a web demo using Vite and wasm-pack! The demo interfaces with the rust code using web assembly.
THE PARSER IS DONE! 81 is the final count!
I made a new haiku checking function and fixed the number renderer so and is not at the end of a number like: two hundred, before it would say two hundred and for 200.
Syllable estimation is now fully accurate to the ruby code and is WAY FASTER! Trillion correctly has 2 syllables.
New format function that properly collects numbers.
I also put the raw ID CSVs into the repo and added a guide for anyone to use it themselves.
Improved the parsing logic so it finds correct IDs now. The format function skipped numbers sometimes and didn't count SYLs right. UPDATE: It's now 16x faster because I removed regex!
Emir David Bruges Belaides and I did this together! (see thread: https://hackclub.slack.com/archives/C015M4L9AHW/p1751846721244419 WARNING: VERY LONG)
I published it since I made my version of the code, however we figured out the haiku creation system together!
I wrote this script with @Emir David Bruges Belaides to analyze all the hackclub server member IDs and find out which ones, just by mentioning them, make the orpheus bot make a haiku out of their name! Demo is a WASM compiled binary for JS.
HARD MODE IS IMPOSSIBLE ONG. I ONLY ONE ONCE AFTER 10 TRIES! I added new win modulation cards which can change the length to win! both you and the AI can use it. Also, its harder to get team cards in hard mode (why it is so hard now) you start with ONLY BLOCKED cards. To unlock team cards @ level 5, then re-unlock them at 24!!!
VERY HARD!
This is my only win, very hectic!
I added a new icon for the slack auth (see attachment)
I also made the hard mode even HARDER. YOU ARE FORCED TO A 5x2 GRID! HAHAHAHAH. Additionally, I played with oAuth for an hour. I found out that my app was requesting your email! (very odd!) I disabled it since it only needs your name for the AI and leaderboard.
Might ship soon?
Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor Refactor
I remade the entire game logic and split it into many files.... I made hard mode harder by telling the AI to not expand sideways.
I fixed a few bugs because of the refactor too. I fixed the cursor and a few lag issues. The cursor now moves with the difficulty slider.
Added difficulty slider: You baby.
lint all files and add new xp events for special cards.
UGHH. I rebuilt the AI and it is quite smart now! I am using ai.hackclub.com for the model.
Why? Well, I got ratelimited by groq for the ENTIRE DAY within 10 minutes of sending the link into the slack chat. Yep! (If you know anything about groq limits, you know they are VERY forgiving with ratelimits). To solve this, I used hackclub's free AI API!
If you know anything about status of ai.hackclub.com, you may be asking the following questions:
- What! How! Doesn't that not work with tools?
- But it only does text, and you are controlling a game?
Yep! It does NOT support tools. That's why I built a custom parser (3 lines of regex :skull:) that controls the game by using things like this:
X|1|0 Which will place an X at (1, 0) on the board. The AI model outputs those XML-ish strings and my code parses them.
Well there might be one more question depending on wheather you have read the codebase: How did you get the hackclub ai api to work with the Vercel AI SDK?
Since the Hackclub AI API does NOT use SSE, but instead application/x-ndjson, which is a fancy way of saying a bunch of JSON then a new line, then more JSON (repeat until you get bored). SSE or Server-Sent events is a much better standard for AI streaming. I made a small fetch-wrapper and a OpenAICompatable:tm: AI SDK provider to wrap hackclub. It transforms x-ndjson to SSE!
I tried to use middleware for tools but it wouldn't parse correctly when accompanied with text. I could have just put the text INTO the tool call but this was more fun!
Pros:
- Faster inference! I also now use a much faster model that is more powerful and can play TT*U better!
Cons:
- Buggy ATM
- Kinda a step back
- Unreliable
It should be easier to maintain though, as I have almost no wrappers on the raw HTTP requests to the server now.
Mobile support is silently improving.... And I fixed the CRT effect on scrolling pages. It now sticks to the screen instead of staying at the top.
I fixed the win function so when the board is completely filled and no one has won yet, the game ends in a tie.
When playing cards that you have just received, sometimes the IDs get reused and the old cards reappear as ghosts from the past (id is the key in a react map). I added an ID counter which stores the highest ID ever seen per player. Now when you use cards you just got, they properly disappear.
New How to Play Page. I also began work on mobile support.
I implemented the block and neutralize cards. I added textures for them and textured the lowercase card.
More round-based deck leveling. Higher levels now increase the chances of cards unlocked on lower levels.
I remade the win function. It now computes every possible line inside of a NxK matrix of length L every time N, K, or L change. It stores this in a persistent state (not zustand, state does not need to update bc of this)
I also implemented dealing, so you get more cards after every other round (when the turn is the same as the starting turn, which is ALWAYS THE AI. THEY DOMINATE). Dealing is round based and you unlock more cards the more rounds you play. Ie You dont get Extend cards until level 3. The AI has them all by default though...
The AI is now fine tuned to play properly... it will end you. It can now lowercase your letters. (this is why I had to make that new win function). Unironically, the win function for the is 112 lines SHORTER than the CRT filter lmao.
The board is now fully centered on the Y axis as well, it also works better on small screens, however mobile is not supported yet, I am focused on making the game.
I fixed the CRT filter too, the scanlines move now.
The AI can now overwrite your cards, and make them lowercase too.
I added a new win screen which has some more formatting.
I fixed a bug where the Game could not remove the AI's cards.
Auth is disabled in dev mode in case you needed that.
Total AI prompt
BYE!
// TODO: Add neutral and blocked rendering + support in AI and human.
I finished the AI! Almost... I still need to add a few cards that it can play such as: Lowercase a letter (yes... they count differently), Block Cells, Neutralize cells, etc. All the fun goodies! Tool calls should now work better, i switched the model to groq's fine tuned llama.
I implemented full auth, you now HAVE to be signed in to use any API besides /api/auth / and /leaderboard (might change to ratelimit requests if it gets too bad...). If you are not signed in it redirects you to a helper /signin page.
XP now only gives XP for human events now, before the AI would give you XP... It's not that nice IRL believe me.
I added the Extend card and an animated GIF for it! It grows the board in the direction of the side it is closest to. I also fixed board CSS so it works with larger sizes now. Moreover, the indicies are now right for board display and AI model board input. I used the incorrect index formula ( row * rows + col instead of col * rows + row ) so alignment got fixed for non NxN boards (NxK etc).
You can no longer pick up the AI's cards. I could add this back and make it get mad at you but... too much work lel.
I ditched the event based system for human cards which sucked. Now, the card component just modifies state itself, and as a bonus, gives you the card back if the move was invalid!
General cleanup etc,
Added CQW container sizing so the letters in the board dynamically scale to the size of the board ( small cells = small letters )
Renamed XPsidebar to sidebar bc it now stores the AI model output for better visibility.
I fixed: applyCardToCell, extendCell, makeMove, winState
Better AI zod schema & System Prompt
I implemented winning! You can now win! It also should add your state to the leaderboard and you should be number #2 (im always #1 :) ).
Technically I can release this rn, but I wanna send it to the #summer-of-making channel and let them weed out the bugs lol.
This IS MVP!
PLAY IF YOU DARE /cringe-warning
NEWSFLASH: The AI works now!
I'm using groq + AI SDK to do the AI end of things, and it has been a breeze to implement. The AI can play moves (Extend, X, O) which are just Cards + Position/Direction data. I will add more cards then publish soon.
INTEGRAL + AI2
ADD AI. REPLACE HUMAN. MANUFACTURE CELLS............
Better card mechanics, you can now place the cards into the board.
Build Status: Not pushed, not building.
AHHHHHHH THIS HURTS!
I finally made a balatro-style card ebgube hkjhd react component. THIS TOOK 5 HOURS AAAAA. I NEED SLEEpp. Also i made a better CRT filter. IT BENDS THE SCREEN! IT ALSO BREAKS YOUR PC BY TURNING ON THE FANS! HAHA I NEED SLEEP.
Implementing version 0.1.0!!!!!!! Here's a screenshot from the main branch! NOTE: Please do NOT use the auth yet, I am trying to test it.
The Classic Kid's Game + Balatro + A snarky, cursing, and cheating AI who will do anything to bring you to the ground. Play Today... If you dare!
I am still porting it from SolidJS to NextJS, old version is available at the demo link.
Fixed docs.rs documentation for the demo link
yay
I added some of the libraries I forked and worked on to make flippy to the associated hackatime projects.
Too tired to find a funny meme so here's a recycled one:
Rearranged some things, 0.10.0 soon.
SHIP SOON! DEMO SOON! ITS ALL HAPPENING SOON!
MASSIVE UPDATES. 0.4.1 brings many new features missing from the cli, new logging, better error handling, more progress, etc. Not 0.5.0 since no breaking changes but alas its fine.
This took a while lol.
Version updates, better logs, fixed the universe (tokio).
Did some things!
FLIPPY
logo./
prefix in operation paths since
it does not exist.json
feature for tracing_subscriber
json
logging via the --json
flagrelease-hyper
overkill performance profileupload
operationsowo-colors
: I need to figure out a better way to colorize version info
without compromising binary size and ease of use.:kekw:
from package descriptionlogo.txt
, please see src/art.rs for the latest art.unicode-width
→ 0.2.1
flipper-rpc
→ 0.9.3
flake.lock
Y
now joins into the P
preceding it.level!(variable, "...")
form instead of level!("...{variable}...")
for
better JSON logging support.Ok so I just did some general cleanup of the codebase, and fully implemented the update command! It put my flipper on a new firmware! I also fixed a bug where it would not use custom firmware at all.
It now pretty-prints the firmware info with fancy colors!
Attached is a relevant image.
Adds some general perf improvements. Almost stable 1.0.0!
TAR support has been enhanced.
fs_extract_tgz
to fs_extract_tar
as that function does
not handle gzipped data.I attempted to fix the update tar copying. It kinda worked! Most of the time was spend on flipper-rpc trying to debug HOW and WHY it was not working when I tried to send a the .tgz file to the flipper. But now I get errors: STORAGE_INTERNAL, I think the flipper doesn't support gzip tars, in that case the ENTIRE THING I JUST DID TODAY was ABSOLUTELY USELESS. and i'm VERY MAD :(
Woah! 0.8.0! (wern't we just at 0.6.x?? Nevermind, I put alot of updates out lol)
This fixes a few things. Larger files are now supported by fs-write, using the unorthodox send a ping every so and so strategy taken from qFlipper to keep the connection alive.
You can now create_dir while the dir already exists, this just does nothing now.
You can now extract flipper-side .tgz to extract files, used in flippy to read firmware updates and send them faster.
MPSC Channels now take Options, so you dont HAVE to track progress when fs-progress-mpsc is enabled.
Bout it!
Most of these updates relate to firmware in flippy.
CHANGELOG
FIXES:
Currently working on update mechanism, just implemented the tar extraction wrapper in flipper-rpc, will work on demo video after this.
Current status: Everything is Fine... Or is it?
0.2.3 brings exciting new features (implementations)
Hey it’s beginning to look like you can tell when I’m too tired to use ChatGPT for my devlogs! This man is a fraudster! Or at least it seems so…
I added the update download and parsing functionality, running flippy firmware pull
now successfully downloads the latest tgz from your channel and extracts it (What innovation!) TODO: Copy it to the flipper and run the update command.
I also added cool pictures when the cli errors. With that ascii bundle comes the ALL NEW FLIPPY UNOFFICIALLY OFFICIAL CLI LOGO party parrot noises
thank you for not reading this
Wow you read even father! (Typo in case you missed it)
TIL: you can restore old firmwares on a flipper by going to /ext/update/*/update.fuf and clicking run! No download required!
Attached is the windows update cycle for reference on how NOT to do it.
Use hex::encode
instead of format!(“{:x}”)
for md5
Haven’t published anything but I want my 11mins
In all seriousness I added more logging, not enough for a 0.6.4, expect it soon!
Day 3: Today was ALL about PATHS!!!
Features & Improvements:
upload
now uses MD5 hashes to determine whether remote files differ from local ones, reducing false positives from size-only checks.Op
enum and improved diff generation.map
: You can now add exclusions using --excludes
, which updates the flip.toml
mappings appropriately.💬 CLI polish:
--force-walkdir
flag to upload
(stubbed with unimplemented!()
).-v
, -vv
, -vvv
.Internal Changes:
prune
, create
, and update
stages.join_as_relative
into a shared utility.is_file
/is_directory
helpers with direct checks to improve correctness and reduce misuse.main.rs
, including error handling, tracing setup, and command dispatch logic.Fixes:
.flippy_do_not_remove
sync logic.
```
feat: implement checksum-based remote diffing and clean up CLI--force-walkdir
option to upload
(not yet implemented)--excludes
in map
command0.6.3 adds better logging and support for large files using serial-opt.
NEW LOGO! It's even patented by OpenAI!
Replaced the old Vec
system with a clean Mappings
struct.
MappingEntry
with include
/exclude
lists.Introduced a SyncFile
structure that gets written to Flipper as /ext/.flippy_do_not_remove
.
upload
is now a fully working command that computes a three-way diff, however it does not perform any operations yet, it just logs them
gix
to diff the local repo stateImproved UUID collision handling for repositories
Upgraded flipper-rpc
to use transport-serial-optimized-large-stack-limit
, needed for large ass reads with some dirs
Added significant internal diagnostics and tracing messages
New flip.toml structure for mappings, I changed this to support a better diff algo.
Copy
to batch file transfersday 2: refactor(mapping): switch to typed mapping system, integrate sync file support
- Introduced new typed `Mappings` structure with explicit fields for each mapping type (e.g. subghz, nfc)
- Replaced vector of enum-based mappings with structured `MappingEntry` objects
- Updated `.gitignore` to include `/f0` temporary files
- Upgraded `flipper-rpc` to 0.6.3 with `large-stack-limit` transport feature
- Switched upload flow to rely on a persistent sync file for fast diffing
- Implemented file transfer ops as diff ops: Copy, CreateDir, Remove
- Improved path handling and structured remote directory interactions
- Prevented duplicate repositories by checking both UUID and name
- Added fallback logic for first-time uploads without sync metadata
VERSION 0.1.0 IS OUT! (Forget the 4h whatever, this took 1.5+ months)
Guess what! It doesn't work. Actually a lot of it DOES work, but everything else does NOT.
Every function besides flippy upload
is implemented. Also its buggy. DO NOT USE THIS. YOUR FLIPPER ZERO WILL, AND I REPEAT WILL, NOT WORK IF YOU (ie, not me) RUN ANYTHING STUPID (ie, i wouldnt do it).
No docs here. No adventure. Here's it raw!
Check the repo :cheers:
YOU WANT DOCS? flippy help
there are your docs you scumbag.
seriously don't run this it may brick everything you own (could you imagine your mom turning into a brick?)
Flipper Zero Remote Procedure Call Library (RPC) – A Rust 🦀 library enabling apps to remotely control a Flipper Zero device, similar to qFlipper. Built using the official Flipper Zero protobuf definitions. Resources
No releases yet! However I have been hard at work on this project for over two MONTHS...
I have been juggling this project with flipper-rpc (the sister project that powers flippy) and development has been mainly for that.
Expect 0.1.0 soon!
Flipper Zero firmware and remote archive management. This copies files from a local git repo EXTREMELY EFFICIENTLY AND FAST to your flipper zero so you can have large DB dumps with ease!
This was widely regarded as a great move by everyone.