home.social

Search

17 results for “localfirst”

  1. I needed a bar chart from a client spreadsheet. Names, invoice totals, a few formulas. Every “paste your CSV” tool I opened wanted an account, a POST, or both. The data wasn’t secret in a compliance sense — it just wasn’t something I wanted sitting in someone else’s temp bucket for a week.

    So I built the pipeline in the tab: parse → choose encodings → render → export. No upload step. The file never leaves the machine.

    This isn’t a product pitch. It’s the shape of a local-first chart path that frontend folks keep reinventing, and the places it usually breaks.

    What “local-first” means for charts


    Local-first here is boring and specific:

    1. Parse in the browser — FileReader / drag-drop / paste from Sheets
    2. Infer or pick columns — which field is the category, which is the measure
    3. Render with a client library — ECharts, Chart.js, Observable Plot, whatever you already ship
    4. Export as a blob — PNG / SVG / CSV download via URL.createObjectURL

    Nothing in that list needs a chart SaaS. The temptation is to outsource step 2–4 because “AI will pick the right chart type.” You can still do that locally (WebLLM, Ollama on localhost, or a heuristic). The point is the CSV bytes don’t have to cross a trust boundary to get a PNG.

    Where paste-and-upload usually goes wrong


    I’ve used a lot of hosted plotters. The friction isn’t the UI — it’s the data path:

    • Silent retention — “we delete in 24h” is a promise, not a guarantee you can verify
    • Account gates — free tier wants email before you see a download button
    • Column renaming — the service “helps” by rewriting Invoice Total ($) into value, then your export no longer matches the source sheet
    • One more network hop — a flaky Wi‑Fi day turns a five-minute chart into a support ticket

    For internal ops sheets and freelance client data, that path is the wrong default. The silicon is already on the desk.

    A minimal pipeline that stays in the tab


    Here’s the skeleton I keep coming back to.

    1. Ingest without a server

    async function readTable(file) {
    const text = await file.text();
    // or Papa Parse / d3-dsv for quoted fields and European decimals
    return parseCsv(text);
    }

    Paste from Sheets is often more useful than file pick: listen for paste, read clipboardData.getData("text/plain"), split on tabs.

    2. Separate “table” from “chart spec”

    Don’t bake chart type into the parser. Keep a plain array of row objects, then a small spec:

    type ChartSpec = {
    type: "bar" | "line" | "pie";
    x: string; // column name
    y: string; // column name
    title?: string;
    };

    If you later add an agent to suggest type / x / y, feed it column names and sample rows — not the whole file to a remote API unless the user opted in.

    3. Validate the spec against real columns

    This is the bug that burns people. Models invent a column called value. Heuristics pick the first numeric field even when it’s an ID. Validate:

    function assertSpec(spec, columns) {
    if (!columns.includes(spec.x) || !columns.includes(spec.y)) {
    throw new Error("spec points at missing columns");
    }
    }

    Fail loud. Fall back to a deterministic guess only after the fancy path fails.

    4. Render and export as blobs

    ECharts (and most canvas/SVG libs) can getDataURL or serialize SVG. Wrap that in a download:

    function downloadPng(dataUrl, name = "chart.png") {
    const a = document.createElement("a");
    a.href = dataUrl;
    a.download = name;
    a.click();
    }

    No FormData to /api/export. No “email me the PNG.”

    Optional AI without giving up local


    If you want “make this a pie” or “title it June collected,” you have three honest options:

    ApproachData leaves machine?Good forHeuristic (column types + cardinality)NoDefault first chartLocal model (WebLLM / Ollama)No*Spec suggestionsHosted LLMYes, unless you redactOnly with explicit opt-in


    *First weight download or 127.0.0.1 still isn’t “upload the CSV to a chart vendor.”

    I treat AI as a spec suggester, not a renderer. The table and the canvas stay under your code. The model returns JSON; you validate; you draw. If validation fails three times, ship the heuristic chart anyway — a wrong-but-local bar chart beats a spinner waiting on a remote plot API.

    DX checklist before you reach for SaaS


    When I’m tempted to paste into a hosted tool, I ask:

    1. Does this sheet contain names, amounts, or anything I wouldn’t put in a public Gist?
    2. Do I already have a chart library in the app or a side panel?
    3. Is the job “one PNG for a slide” or “ongoing dashboard with auth”?
    4. Can export be a blob download in under fifty lines?

    If (1) is yes and (3) is a one-off, local wins. Hosted dashboards still make sense for multi-user live data. One-shot client charts usually don’t need that architecture.

    What I’d ship in a weekend spike


    • Drag-drop + paste ingest
    • Column picker (manual) with a heuristic default
    • One chart type done well (bar), then line/pie
    • PNG + SVG export
    • A toggle: “suggest encodings with local model” — off by default

    That’s enough to stop uploading spreadsheets for a title slide. You can grow it later with saved specs in localStorage, themes, or an agent that only sees column headers.

    The pattern matters more than any one library: keep the bytes on the device until the user explicitly chooses otherwise. Charts are a perfect fit for that rule — the input is a file you already have, and the output is a file you want back.

    Next time a tool asks you to create an account before it will draw bars from your own CSV, that’s a signal. The pipeline above fits in a single page. Build that page once, and the upload prompt gets a lot easier to ignore.#frontend #localfirst #dx #webdev #software #coding #development #engineering #inclusive #community
    Local-First Chart Pipeline: CSV Chart Export Without Third-Party Upload

  2. The AI hackopalypse is a big opportunity for #localFirst software. Software running in sandboxes on your machine that is not exposed to the internet is much harder to attack.

  3. RE: fosstodon.org/@localfirst/1174

    Mark your calendar to FOSDEM 31th jan 2027, the Local First devrom is on! And that will be a great occasion de meet you all.
    Send your proposals for talk on openlocalfirst.org

  4. RE: fosstodon.org/@localfirst/1174

    We are pleased to organize again this year the Local First devroom at FOSDEM'27. Submit your proposals already! it is going to be an amazing day.

    Reshare, boost, spread the word!

  5. A cloud architecture lesson from Billnix: don't collapse sync, backup and export into one vague “cloud” feature.

    • Drift ↔ Rust/PostgreSQL handles normal same-account continuity.
    • Google Drive checkpoints provide a separate optional recovery path.
    • Drive/export copies are currently documented as readable rather than zero-knowledge encrypted objects.

    Different failure modes, different privacy boundaries.

    #DataArchitecture #Backup #Billnix #LocalFirst

  6. How do you sync data between your own devices, using the cloud, but retain data sovereignty?

    I think I have a solution with Hammer's built-in syncing protocol.

    hammer.ink/blog/principles/syn

    #amWriting #privacy #opensource #localfirst #digitalsovereignty

  7. We are very pleased to announce the Local First devroom at FOSDEM'27 is on!

    We will meet on Sunday 31th of January, all day, at ULB in Brussels for another devroom packed with the best talks and speakers on open source Local First software!

    The Call for Participation is now open

    Submit your proposals here openlocalfirst.org/

    CfP is open until 3rd of December 2026, but do not delay in sending your proposal.

    Looking forward meeting you all for an amazing devroom.
    Spread the word, reshare!

  8. A local-first triage agent that produces a durable, defensible decision to do nothing: a Tinker fine-tune sorts the backlog into NOW / LATER / NEVER, and a Temporal fuse holds the seal.#devchallenge #hf26challenge #ai #opensource #software #coding #development #engineering #inclusive #community
    Leave It: I fine-tuned a 4B model to defer 73 of 731 GitHub issues, then killed its worker with -9
  9. What I Built


    Meet SlothTask AI, a local-first productivity assistant designed around one simple idea: repetitive digital housekeeping shouldn't consume our time and attention.

    We all accumulate clutter—poorly named documents, crowded Downloads folders, and files we keep postponing organizing. SlothTask AI helps automate that work.

    It can:

    • Organize files: Categorize documents into meaningful folders.
    • Suggest better filenames: Turn confusing filenames into descriptive ones.
    • Summarize documents: Generate short summaries so users can understand files faster.
    • Keep users in control: Preview proposed changes before applying them.

    The goal isn't to make people work faster at everything. It's to help them spend less time on tasks that don't deserve their attention.

    Demo


    [Add your live demo or screen-recorded walkthrough here.]

    The demo will show a cluttered folder, the AI-generated organization plan, and the resulting structure after approval.

    Code


    [Add your public GitHub repository URL here.]

    The repository will include setup instructions, source code, example inputs, and instructions for running the application locally.

    How I Built It


    SlothTask AI is built around an open-weight language model running locally through Ollama.

    The application uses Python to inspect files and perform controlled filesystem operations. The model handles language-based tasks, including document categorization, filename suggestions, and summarization.

    The workflow is straightforward:

    1. The user selects a folder to organize.
    2. The application gathers basic file metadata and supported text content.
    3. The local model generates structured suggestions.
    4. The application validates the suggestions and displays a preview.
    5. The user approves the changes before any files are moved or renamed.

    The application separates AI reasoning from filesystem operations. The model proposes actions; Python validates and executes only permitted operations.

    This design makes the system easier to inspect, test, and extend with additional models or organization rules.

    Why Does Open Innovation Matter?


    For SlothTask AI, open innovation is about control, privacy, flexibility, and accessibility.

    1. Privacy by design

    Documents can contain personal information, assignments, financial records, and other sensitive content. Running inference locally allows supported processing to happen on the user's machine instead of requiring every document to be sent to a third-party AI API.

    2. Freedom to change models

    An open-weight architecture makes it possible to experiment with different compatible models and compare their categorization accuracy, response time, and resource requirements without redesigning the entire application.

    3. Fewer recurring API costs

    Once the required model is downloaded, local inference doesn't require a per-request hosted-model API fee. Hardware, electricity, storage, and setup still have costs, but users can avoid recurring inference charges.

    4. More control over the system

    The application can combine model output with transparent Python rules, validation, and user approval. Developers can inspect and modify the workflow instead of relying entirely on a closed API's behavior.

    Open-weight AI isn't automatically better than every closed model. Hosted models may provide stronger results or require less local hardware. The advantage here is that local processing and model flexibility align with the problem we're solving.

    My Agent Session


    [Optional: Add a DevRelay agent session link or embed your recorded session here.]

    The Lazy Payoff


    The real payoff is reducing the small, annoying decisions that accumulate throughout the week.

    Instead of opening every document, inventing a filename, and deciding where it belongs, a user can review a single proposed organization plan.

    The intended result is simple: fewer repetitive actions, less context switching, and a cleaner workspace.

    I'll evaluate the workflow using a sample folder and compare the time required for manual organization against AI-assisted organization. I'll also check whether the suggested filenames and categories are accurate enough to be useful.

    Prize Categories


    [Add the applicable partner prize categories from the official challenge page after verifying eligibility.]

    Final Thoughts


    I like the idea behind Slow and Steady: useful technology doesn't always need to make us do more. Sometimes, the best tool is the one that quietly removes work from our day.

    SlothTask AI explores how open-weight models can make everyday automation more private, flexible, and accessible.

    Stay slow. Let the boring stuff run itself. 🦥#devchallenge #hf26challenge #software #coding #development #engineering #inclusive #community
    SlothTask AI: Let Open-Source AI Handle the Boring Stuff 🦥

  10. What I Built
    I built SlothSummarizer, a local, offline, open-source AI CLI tool that reads your messy group chat exports or meeting notes and hands you a strict two-line summary plus a maximum of three action items.
    Who gets to be lazier? Anyone who has ever woken up to 400+ unread messages in a group chat, only to find out the only important thing was "Meeting moved to 3 PM." Instead of scrolling for 15 minutes, you run this tool locally and get the gist in seconds.
    Demo
    Here is an example of the terminal output when feeding it a messy chat log:

    🦥 SlothSummarizer is waking up slowly...

    --- 🌅 Your Lazy Morning Summary ---
    The group discussed moving the Wednesday meeting to 3 PM and agreed on ordering pizza for the office.
    Action items:
    - Confirm the 3 PM meeting room booking.
    - Collect dietary restrictions for the pizza order by Tuesday EOD.
    ------------------------------------

    Code
    The core logic is a simple Python script that calls Ollama's local API. Here's the summarization function:

    import ollama

    def summarize_chat(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
    chat_text = f.read()[-4000:]

    prompt = f"""You are SlothSummarizer, a lazy but efficient AI assistant.
    Read the following chat log. Provide exactly:
    1. A two-line summary of what happened.
    2. A bulleted list of up to 3 action items (if any).

    Chat log:
    {chat_text}
    """

    response = ollama.chat(model='llama3.2', messages=[
    {'role': 'user', 'content': prompt},
    ])

    print(response['message']['content'])

    How I Built It
    I built this using Python and Ollama, running the llama3.2 open-weight model entirely via local inference.
    The script reads a text file, truncates it to fit safely within the local context window, and passes it to the locally hosted llama3.2 model with a strict system prompt demanding extreme brevity. No cloud APIs, no external dependencies beyond the local Ollama daemon.

    Why Does Open Innovation Matter?


    Open innovation is the only reason this tool is viable for its intended purpose:
    Absolute Privacy: Group chats and personal notes are sensitive. Running an open-weight model locally means my data never leaves my machine or goes to a third-party server.
    Zero Cost & No Rate Limits: Closed APIs charge per token. Summarizing large, messy text files frequently would incur costs or hit rate limits. With open-source local inference, it costs nothing to run, encouraging true "set it and forget it" laziness.
    Offline Reliability: It works on a laptop with no internet connection, perfectly embodying the "Slow and Steady" theme.

    My Agent Session


    While this is a straightforward local script rather than a multi-step agent harness, the development process involved iteratively refining the prompt in Ollama to ensure the model strictly adhered to the "two-line summary + max 3 bullets" rule, resisting the urge to be overly verbose.

    The Lazy Payoff


    I tested this on a real 300-message WhatsApp export from a project group. Reading it manually would have taken ~12 minutes. Running SlothSummarizer took 8 seconds of local inference time and saved me from reading 250+ messages of "lol", "k", and off-topic tangents. I now run it every morning on my overnight chat exports.

    Prize Categories


    Local-first AI / Privacy-focused AI (Open-weight models running locally)#devchallenge #hf26challenge #software #coding #development #engineering #inclusive #community
    🦥 SlothSummarizer: A Local, Offline AI Tool for Lazy Mornings

  11. 🐧📚 Para investigadores y nerds de la terminal: les presento liber, un gestor de referencias académicas LOCAL-FIRST y open source (GPL v3, Python).

    La clave: no depende de la nube ni de una base de datos opaca. Combina línea de comandos + app web para organizar papers, BibTeX y notas sin servicios externos. 🧵

    ⚖️ ¿El problema? Zotero, Mendeley o EndNote guardan todo en una base de datos opaca o en la nube de un tercero: lock-in y datos que no podés auditar.

    liber invierte la lógica: cada paper vive en SU PROPIO directorio con un registro BibTeX, opcionalmente el PDF y notas en Markdown. Archivos ordinarios, inspeccionables y respaldables. 🔓

    🗂️ Así funciona por dentro:

    → Un índice central rastrea los metadatos bibliográficos para ubicar papers a medida que crece tu colección.
    → Al ser archivos planos, los gestionás con Git, rsync, grep o cualquier herramienta que ya usás.
    → Notas en Markdown por referencia, editables desde CLI o navegador.

    Sin caja negra. 🐧

    🖥️ Dos interfaces, un mismo núcleo:

    ✅ CLI: ideal para scripting y workflows de terminal (el sueño del sysadmin investigador).
    ✅ Web: alternativa gráfica para gestionar referencias y documentos adjuntos.

    Escrito en Python y bajo GNU GPL v3.0. Para el método de instalación exacto, mirá el repo (github.com/LukasKarner/liber) — no te invento comandos. 🛠️

    🎯 Lo que hace bien:

    ✅ Genera citation keys automáticas (autor+año+título).
    ✅ Búsqueda por título/autor/keyword/año/tag, combinando filtros con AND.
    ✅ Tags personalizados + registro global de tags.
    ✅ Renombrá una citation key y actualiza los archivos asociados solo.
    ✅ Exportá bibliografías completas o filtradas a BibTeX. 📄

    💡 ¿Para quién? Para investigadores que quieren SOBERANÍA de sus datos y un workflow de terminal, no un servicio que les cobre o les opaque la colección.

    🔗 github.com/LukasKarner/liber

    #Liber #ComunidadTech #Mendoza #SoftwareLibre #AcademicWriting #OpenScience #Python #CLI #FOSS
    #BibTeX #Markdown #Git #DataOwnership #SoftwareLibre #Investigacion

Share on Mastodon

Enter the server where you have an account.