diff --git a/src/data/contributions.ts b/src/data/contributions.ts index 87504d1..ffd020f 100644 --- a/src/data/contributions.ts +++ b/src/data/contributions.ts @@ -4,7 +4,7 @@ export const contributions: Contribution[] = [ { repo: "DarkFlippers/unleashed-firmware", emoji: "🔓", - stars: 22041, + stars: 22139, pr: 1048, desc: { en: "The EMV parser took each TLV length straight off the card, so tapping a crafted card wrote past several fixed-size fields and a stack buffer.", @@ -15,7 +15,7 @@ export const contributions: Contribution[] = [ { repo: "DarkFlippers/unleashed-firmware", emoji: "🔓", - stars: 22041, + stars: 22139, pr: 1049, desc: { en: "A reader writing to the emulated NFC tag at offset 1 shifted the stored payload by a byte and spliced in a stale byte from the previous frame.", @@ -26,7 +26,7 @@ export const contributions: Contribution[] = [ { repo: "Next-Flip/Momentum-Firmware", emoji: "⚡", - stars: 9012, + stars: 9086, pr: 573, desc: { en: "The same unbounded EMV lengths as the unleashed fix, except here the stack overflow is not compiled out of the release builds the project ships.", @@ -37,7 +37,7 @@ export const contributions: Contribution[] = [ { repo: "Next-Flip/Momentum-Firmware", emoji: "⚡", - stars: 9012, + stars: 9086, pr: 574, desc: { en: "The Type 4 Tag write fix, ported to the byte-identical copy of the file this firmware carries.", @@ -48,7 +48,7 @@ export const contributions: Contribution[] = [ { repo: "vitessio/vitess", emoji: "🐬", - stars: 21218, + stars: 21278, pr: 20700, desc: { en: "A sharded query with EXISTS inside a CASE silently dropped half of its WHERE clause and returned the wrong rows.", @@ -59,7 +59,7 @@ export const contributions: Contribution[] = [ { repo: "vitessio/vitess", emoji: "🐬", - stars: 21218, + stars: 21278, pr: 20701, desc: { en: "An outer join against a reference table returned every preserved row once per shard instead of once.", @@ -70,7 +70,7 @@ export const contributions: Contribution[] = [ { repo: "traefik/yaegi", emoji: "🐹", - stars: 8356, + stars: 8381, pr: 1729, desc: { en: "A constant condition in an if or for statement crashed the interpreter instead of reporting a compile error, taking down any program embedding it.", @@ -81,7 +81,7 @@ export const contributions: Contribution[] = [ { repo: "traefik/yaegi", emoji: "🐹", - stars: 8356, + stars: 8381, pr: 1730, desc: { en: "Using a package name as a value crashed the interpreter five different ways, and inside a return statement it raised no error at all and ran.", @@ -92,7 +92,7 @@ export const contributions: Contribution[] = [ { repo: "traefik/yaegi", emoji: "🐹", - stars: 8356, + stars: 8381, pr: 1731, desc: { en: "Every pull request had a red lint job: the pinned linter was built with an older Go than CI installs, so it panicked before reporting anything.", @@ -103,7 +103,7 @@ export const contributions: Contribution[] = [ { repo: "tobymao/sqlglot", emoji: "🧩", - stars: 9517, + stars: 9579, pr: 7969, desc: { en: "DuckDB was modelled as returning NULL on division by zero, but it follows IEEE 754 and returns inf, so transpiled queries diverged.", @@ -114,7 +114,7 @@ export const contributions: Contribution[] = [ { repo: "fonttools/fonttools", emoji: "🔠", - stars: 5198, + stars: 5222, pr: 4137, desc: { en: "Instancing a variable font left the BASE table untouched, so instances kept the default baselines and a dangling variation store.", @@ -125,7 +125,7 @@ export const contributions: Contribution[] = [ { repo: "MatthewKuKanich/FindMyFlipper", emoji: "📍", - stars: 2184, + stars: 2192, pr: 144, desc: { en: "An infinite 2FA loop blocked report fetching: the anisette device identity was partly overwritten with random UUIDs. Behind seven reported issues.", @@ -136,7 +136,7 @@ export const contributions: Contribution[] = [ { repo: "chearon/dropflow", emoji: "📐", - stars: 1367, + stars: 1368, pr: 34, desc: { en: "A box with position: absolute stayed in normal flow and ignored its insets entirely, the last piece of CSS 2.1 positioning the engine was missing.", @@ -147,7 +147,7 @@ export const contributions: Contribution[] = [ { repo: "docker/compose", emoji: "🐳", - stars: 38036, + stars: 38074, pr: 13992, desc: { en: "A single directory the user cannot read made compose watch fail to start, so nothing was watched at all: the ignore list is applied to events, never to the walk that registers the watches.", @@ -158,7 +158,7 @@ export const contributions: Contribution[] = [ { repo: "python/mypy", emoji: "🏷️", - stars: 20591, + stars: 20617, pr: 21805, desc: { en: "A walrus nested inside a condition, as in if cond and (woo := 5) + n, left the variable optional in the branch where the assignment had certainly run.", @@ -169,7 +169,7 @@ export const contributions: Contribution[] = [ { repo: "pact-foundation/pact-python", emoji: "🤝", - stars: 677, + stars: 682, pr: 1669, desc: { en: "Any exception in a message handler surfaced as error sending request for url: the 200 response line was sent before the handler ran, so the dropped connection looked like a network fault.", @@ -180,7 +180,7 @@ export const contributions: Contribution[] = [ { repo: "python/mypy", emoji: "🏷️", - stars: 20591, + stars: 20617, pr: 21806, desc: { en: "Calling an abstract staticmethod or classmethod straight off the abstract class raised no error, even though instantiating that same class does.", @@ -191,7 +191,7 @@ export const contributions: Contribution[] = [ { repo: "pact-foundation/pact-reference", emoji: "🦀", - stars: 104, + stars: 106, pr: 547, desc: { en: "A V4 message whose contents were written without the expected envelope was read as having no body at all, so the interaction verified successfully whatever the provider produced.", @@ -202,7 +202,7 @@ export const contributions: Contribution[] = [ { repo: "docker/compose", emoji: "🐳", - stars: 38036, + stars: 38074, pr: 14084, desc: { en: "Syncing a directory onto a path the image exposes as a symlink aborted the whole watch batch: the archive carried a header for that directory, and the engine refuses to replace a symlink with one.", diff --git a/src/data/projects.ts b/src/data/projects.ts index d675c8b..6768f6b 100644 --- a/src/data/projects.ts +++ b/src/data/projects.ts @@ -3,6 +3,19 @@ import type { Project } from "../lib/projects"; export const categoryOrder = ["web apps", "flipper zero", "experiments"]; export const projects: Project[] = [ + { + name: "Zarata", + emoji: "🎚️", + icon: "https://endika.github.io/zarata/favicon.svg", + desc: { + en: "A sound level meter you hold in your hand. Watch the room, drag a red mark onto the dial where it starts to bother you, and it beeps when the noise crosses it. The whole session is drawn as one line, and the screen stays awake while it listens.", + es: "Un sonómetro de mano. Mira cuánto ruido hay, arrastra con el dedo una marca roja hasta donde te empieza a molestar, y pita cuando se pasa. La sesión entera se dibuja en una línea, y la pantalla no se apaga mientras escucha.", + }, + url: "https://endika.github.io/zarata/", + type: "live", + tag: "PWA", + category: "web apps", + }, { name: "Agora", emoji: "🏛️",