base on A code snippet storage solution written in React & node.js # ByteStash <p align="center"> <img src="https://raw.githubusercontent.com/jordan-dalby/ByteStash/refs/heads/main/client/public/logo192.png" /> </p> ByteStash is a self-hosted web application designed to store, organise, and manage your code snippets efficiently. With support for creating, editing, and filtering snippets, ByteStash helps you keep track of your code in one secure place. ![ByteStash App](https://raw.githubusercontent.com/jordan-dalby/ByteStash/refs/heads/main/media/app-image.png) ## Demo Check out the [ByteStash demo](https://bytestash-demo.pikapod.net/) powered by PikaPods! Username: demo Password: demodemo ## Features - Create and Edit Snippets: Easily add new code snippets or update existing ones with an intuitive interface. - Filter by Language and Content: Quickly find the right snippet by filtering based on programming language or keywords in the content. - Secure Storage: All snippets are securely stored in a sqlite database, ensuring your code remains safe and accessible only to you. ## Howto ### Unraid ByteStash is now on the Unraid App Store! Install it from [there](https://unraid.net/community/apps). ### PikaPods Also available on [PikaPods](https://www.pikapods.com/) for [1-click install](https://www.pikapods.com/pods?run=bytestash) from $1/month. ### Docker ByteStash can also be hosted manually via the docker-compose file: ```yaml services: bytestash: image: "ghcr.io/jordan-dalby/bytestash:latest" restart: always volumes: - /your/snippet/path:/data/snippets ports: - "5000:5000" environment: # See https://github.com/jordan-dalby/ByteStash/wiki/FAQ#environment-variables #ALLOWED_HOSTS: localhost,my.domain.com,my.domain.net BASE_PATH: "" JWT_SECRET: your-secret TOKEN_EXPIRY: 24h ALLOW_NEW_ACCOUNTS: "true" DEBUG: "true" DISABLE_ACCOUNTS: "false" DISABLE_INTERNAL_ACCOUNTS: "false" # See https://github.com/jordan-dalby/ByteStash/wiki/Single-Sign%E2%80%90on-Setup for more info OIDC_ENABLED: "false" OIDC_DISPLAY_NAME: "" OIDC_ISSUER_URL: "" OIDC_CLIENT_ID: "" OIDC_CLIENT_SECRET: "" OIDC_SCOPES: "" ``` ## Tech Stack - Frontend: React, Tailwind CSS - Backend: Node.js, Express - Containerisation: Docker ## API Documentation Once the server is running you can explore the API via Swagger UI. Open `/api-docs` in your browser to view the documentation for all endpoints. ## Contributing Contributions are welcome! Please submit a pull request or open an issue for any improvements or bug fixes. ", Assign "at most 3 tags" to the expected json: {"id":"12860","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"