Bio

you WILL use nixos

Stats

8
Projects
110
Devlogs
99
Votes
8
Ships

Coding Time

All Time: 251h 55m
Today: 0h 0m

Member Since

June 21, 2025

Badges

2
🎨
Graphic Design is My Passion
Oh God How Did This Get Here I Am Not Good With Computer
🚢
Maiden Voyage
you shipped your first project! the journey begins...

Projects

8
pvbc

pvbc

Shipped
2 devlogs 4 days ago
how much of som is vibecoded
14 devlogs 17 days ago
SoM Economy
19 devlogs 22 days ago
web2050

web2050

Shipped
20 devlogs about 1 month ago
The Great Haiku Search
4 devlogs about 1 month ago
Tic-Tac-Fˣᵒk-You
31 devlogs about 1 month ago
flipper-rpc
8 devlogs about 2 months ago
flippy

flippy

Shipped
11 devlogs about 2 months ago

Activity

add new shop items

Update attachment

worked on a new search function for category based searches and qualifiers on users.

Update attachment

updated to hc/ai SSE spec, works without #24 being merged. SSL ERROR FIXED !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Update attachment

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.

Update attachment

Improved search sorting; first fuzzymatch then sort by levenshtein distance. Before it was sorted by leaderboard rank.

Update attachment

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.

Update attachment

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.

Update attachment

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 .

Update attachment

got it working on nest, added a UI to homepage.

Update attachment

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.

Update attachment
Gangsta Ozcan
Gangsta Ozcan created a project
4d ago

pvbc

pvbc, or "Page View Badge Counter" is a little API which gives a shields.io-esq badge with a page view count!

pvbc
2 devlogs 0 followers Shipped

Add reverse shop lookup to see which users bought what items!

Update attachment

finally got it running on nest again! SSL is an issue which will not be fixed by HC, so i can't fix it :(

Update attachment

worked on more metrics. NOTE: did not publish yet

Update attachment

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.

Update attachment

migrated to recharts v3, all of the graphs are BUTTERY SMOOTH now.

Update attachment

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.

Update attachment

worked around SSL error by using /no_think in prompts. This does not work every time.

Update attachment

add cachet for <unknown> usernames; fix hydration error; update prices and shop for BM items; exclude negative balances from lorenz curve;

Update attachment

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.

Update attachment

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

Update attachment

I ACTUALLY GOT IT TO WORK!!! STREAMING XML IS REAL!

Update attachment

I am working on implementing a new XML parser to fix the bugs with the old one, I think it works?

Update attachment

Fix the header on the site to represent current stats

Update attachment

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!

Update attachment

published new version, dealt with the HC API SSL Outage by adding retries to the fetcher.

Update attachment

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!

Update attachment

Worked on fixing the XML streaming for the new ai.hackclub.com model.

Update attachment

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!

Update attachment

fixed an audio bug with the roulette gun. OK I'm actually gonna add mobile support now!

Update attachment

Added a project list to user pages. Caching now uses ISR so it properly revalidates every 5 minutes!

Update attachment

I revamped the entire repository structure, added a license, and published the crate for human consumption!

Update attachment

Added license and wrote a new readme. Fixed many bugs with the parth api wrapper

Update attachment

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)

Update attachment

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

Update attachment

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:

Update attachment

Add a demo, finished project! Refinements needed.

Update attachment

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.

Update attachment

Uhh, I did the classification.

It's bad...

human=6886, ai=15619, human%=30, ai%=69

Update attachment

Working on classifier, so far I have classified a few sets of vibecoded text from a few metrics like emojis em-dashess etc.

Update attachment

Working on embedding all of the devlogs, projects, and users. So far I have successfully embedded every devlog.

Update attachment
Gangsta Ozcan
Gangsta Ozcan created a project
17d ago

how much of som is vibecoded

<- 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.

how much of som is vibecoded
14 devlogs 7 followers Shipped

add usd-shell market chart and improve speeds :hyper:

Update attachment

Implement a new system on user pages for shop items bought per user! Search is now fuzzy.

Update attachment

Added new user-based pages to inspect personal and public balance over time! Working on search

Update attachment

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

Update attachment

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.

Update attachment
  • Shop purchases are now analyzed and shown in a new leaderboard
  • Updated calculateMetrics to include shop metrics based on payout data
  • Improved Lorenz chart labels and layout
  • User leaderboard now displays user data in a table with percentage of total market
  • Adjusted currency formatting and sizes in MonetaryValue
  • Updated default currency to shells
  • Cleaned up layout in UserMetrics and MarketMetrics
  • Fixed UI consistency with shell icon size and formatting
Update attachment

Implement better leaderboard (sorry cyteon), and begin work on shop reverse calculations.

Update attachment

Add metrics i/o chart for net worth and transaction values over time. Added lorenz graph and gini value.

Update attachment
Gangsta Ozcan
Gangsta Ozcan created a project
21d ago

SoM Economy

the somconomy is booming. this includes comprehensive market statistics on fancy interactive graphs!

SoM Economy
19 devlogs 6 followers Shipped

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

Update attachment

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!

Update attachment

add sfx: lose, explode, place, tie; link sfx(lose, explode, place, tie) -> game loss, interactive click, game place, game tie

Update attachment

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.

Update attachment

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:

Update attachment

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!

Update attachment

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:

Update attachment

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)!

Update attachment

Redesigned the logo because the AI one sucked.

Update attachment

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

Update attachment

Configured open-graph and added a new icon + banner!

Update attachment

Added labels to the difficulty slider, added AI expreesions, you can talk back now!

Update attachment

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!

Update attachment

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.

Update attachment

I made the 64 URL length limit now 72. I also migrated to HTTP/2 and made agar.io!

Update attachment

I rewrote the backend with axum, a more maintained and newer framework than rocket. I hope this speeds things up a bit!

Update attachment

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.

Update attachment

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.

Update attachment

Added a new landing page, as well as more AI improvements.

Update attachment

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....

Update attachment

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.

Update attachment

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.

Update attachment
Gangsta Ozcan
Gangsta Ozcan created a project
32d ago

web2050

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`!

web2050
20 devlogs 1 follower Shipped

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!

Update attachment

Add a web demo using Vite and wasm-pack! The demo interfaces with the rust code using web assembly.

Update attachment

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.

Update attachment

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!

Update attachment

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!

Update attachment
Gangsta Ozcan
Gangsta Ozcan created a project
36d ago

The Great Haiku Search

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.

The Great Haiku Search
4 devlogs 0 followers Shipped

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!

Update attachment

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?

Update attachment

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.

Update attachment

Added difficulty slider: You baby.

Update attachment

lint all files and add new xp events for special cards.

Update attachment

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.

Update attachment

New How to Play Page. I also began work on mobile support.

Update attachment

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.

Update attachment

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.

Update attachment

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

Update attachment

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.

Update attachment

INTEGRAL + AI2

ADD AI. REPLACE HUMAN. MANUFACTURE CELLS............

Update attachment

Better card mechanics, you can now place the cards into the board.

Build Status: Not pushed, not building.

Update attachment

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.

Update attachment

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.

Update attachment
Gangsta Ozcan
Gangsta Ozcan created a project
43d ago

Tic-Tac-Fˣᵒk-You

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!

Tic-Tac-Fˣᵒk-You
31 devlogs 10 followers Shipped
Gangsta Ozcan
Gangsta Ozcan worked on a deleted project
2h 6m about 1 month ago

I am still porting it from SolidJS to NextJS, old version is available at the demo link.

Update attachment

Fixed docs.rs documentation for the demo link
yay

Update attachment

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:

Update attachment

Rearranged some things, 0.10.0 soon.

SHIP SOON! DEMO SOON! ITS ALL HAPPENING SOON!

Update attachment

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.

Update attachment

Version updates, better logs, fixed the universe (tokio).

Update attachment

0.4.0

Did some things!

BREAKING CHANGES

  • Changes dependencies and their feature flags, potentially breaking consuming crates. (Why would you consume a binary? I don't know...)

Fixed

  • Use compile constants for coloring the FLIPPY logo.
  • Git diffing now supplies mapping information to the operation handler
  • Git diffing no longer attempts to remove a / prefix in operation paths since it does not exist.

Added

  • json feature for tracing_subscriber
  • json logging via the --json flag
  • release-hyper overkill performance profile
  • Progress bar for upload operations
  • Improved md5 difference algorithm which caches results for an entire directory. This is actually a common occurrence (reading every file in a directory one by one instead of all at once) since most directories stay the same per commit. May change this if it becomes inefficient, however it is fine for now (me).

Removed

  • owo-colors: I need to figure out a better way to colorize version info without compromising binary size and ease of use.
  • :kekw: from package description
  • logo.txt, please see src/art.rs for the latest art.
  • Very large comments of legacy code. (~1k LOC)

Changed

  • Updated package versions for:
    • unicode-width0.2.1
    • flipper-rpc0.9.3
  • Updated flake.lock
  • Logo, the Y now joins into the P preceding it.
  • First iteration of moving all logging statements with variables into the level!(variable, "...") form instead of level!("...{variable}...") for better JSON logging support.
Update attachment

0.3.0 WHAT

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.

Update attachment

0.9.0

Adds some general perf improvements. Almost stable 1.0.0!
TAR support has been enhanced.

BREAKING CHANGES

  • fs-mkdir Return weather the directory already existed.
  • mpsc MPSC no longer transmits data length to save on MPSC transmission data. Please just call .len on your data and use it withing the handling thread if you need it.
  • fs-tar renamed fs_extract_tgz to fs_extract_tar as that function does not handle gzipped data.
Update attachment

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 :(

Update attachment

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

0.8.0

BREAKING CHANGES

  • mpsc When MPSC is enabled, make tx an Option.

Fixed

  • fs-write Taken from qFlipper, when writing large files, insert a ping every once and a while to keep the connection alive.

0.7.1

  • fs-tar-extract Implements the Tar Extraction API, useful for firmware updates.

0.7.0

BREAKING CHANGES

  • fs-createdir No longer errors if the directory already exists.

FIXES:

Update attachment

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?

Update attachment

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.

Update attachment

Use hex::encode instead of format!(“{:x}”) for md5

Update attachment

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!

Update attachment

0.2.1!!!

Day 3: Today was ALL about PATHS!!!

Features & Improvements:

  • 🔁 Checksum-based diffing: upload now uses MD5 hashes to determine whether remote files differ from local ones, reducing false positives from size-only checks.
  • 🗂 Directory operations: Implemented creation/removal logic during upload using an abstracted Op enum and improved diff generation.
  • Exclusion support in map: You can now add exclusions using --excludes, which updates the flip.toml mappings appropriately.
  • 💬 CLI polish:

    • Improved help messages and subcommand docs.
    • Introduced --force-walkdir flag to upload (stubbed with unimplemented!()).
    • Logging verbosity can be adjusted with -v, -vv, -vvv.

Internal Changes:

  • 🧹 Refactored diff passes into cleaner prune, create, and update stages.
  • 🔍 Moved join_as_relative into a shared utility.
  • 🎯 Replaced is_file/is_directory helpers with direct checks to improve correctness and reduce misuse.
  • 🛠 Substantially cleaned up main.rs, including error handling, tracing setup, and command dispatch logic.

Fixes:

  • Ensured logs are flushed before exiting on error.
  • Reduced risk of desync in .flippy_do_not_remove sync logic. ``` feat: implement checksum-based remote diffing and clean up CLI
  • Added MD5-based diffing to improve file sync accuracy
  • Added --force-walkdir option to upload (not yet implemented)
  • Added support for --excludes in map command
  • Improved CLI help messages and structured logging
  • Refactored tree diffing logic to support custom diff closures
  • Removed false-positive size-only comparison and deprecated unused helpers
  • Bumped version to 0.2.1 ```
Update attachment

0.6.3 adds better logging and support for large files using serial-opt.

Update attachment

Upload System Overhaul + Mapping Refactor

What Changed

NEW LOGO! It's even patented by OpenAI!

BREAKING CHANGES (literally all of them)

  • Replaced the old Vec system with a clean Mappings struct.

    • Each known mapping type (subghz, nfc, etc.) is now an optional MappingEntry with include/exclude lists.
  • Introduced a SyncFile structure that gets written to Flipper as /ext/.flippy_do_not_remove.

    • This allows subsequent uploads to compute diffs quickly, skipping already-transferred files.
  • 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

    • Uses gix to diff the local repo state
    • Falls back to a walking_diff (my personal algo) if sync info is missing
    • Applies diff ops conditionally (Copy, CreateDir, Remove) with user confirmation
  • Improved 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.

What Next?

  • Persist remote tree metadata to reduce I/O overhead further
  • Optimize Copy to batch file transfers
  • Allow editing mappings from CLI
day 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
Update attachment

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?)

Update attachment
Gangsta Ozcan
Gangsta Ozcan created a project
51d ago

flipper-rpc

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

flipper-rpc
8 devlogs 1 follower Shipped

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!

Update attachment
Gangsta Ozcan
Gangsta Ozcan created a project
51d ago

flippy

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!

flippy
11 devlogs 3 followers Shipped
Gangsta Ozcan
Gangsta Ozcan joined Summer of Making
51d ago

This was widely regarded as a great move by everyone.