{"id":19107721,"url":"https://github.com/filipecarneiro/elabel","last_synced_at":"2025-10-29T23:35:31.739Z","repository":{"id":209932732,"uuid":"725294373","full_name":"filipecarneiro/ELabel","owner":"filipecarneiro","description":"Open-source solution for electronic labels on wine bottles.","archived":false,"fork":false,"pushed_at":"2025-02-06T16:29:32.000Z","size":5831,"stargazers_count":27,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-30T18:49:23.304Z","etag":null,"topics":["asp-net-core","asp-net-mvc","docker","e-label","elabel","label","qr-code","wine","wine-qr"],"latest_commit_sha":null,"homepage":"https://filipecarneiro.github.io/ELabel/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/filipecarneiro.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-11-29T21:00:44.000Z","updated_at":"2025-04-24T08:55:01.000Z","dependencies_parsed_at":"2024-01-15T11:52:13.522Z","dependency_job_id":"ec767222-4712-4a8c-b788-33ff4fb915e1","html_url":"https://github.com/filipecarneiro/ELabel","commit_stats":null,"previous_names":["filipecarneiro/elabel"],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filipecarneiro%2FELabel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filipecarneiro%2FELabel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filipecarneiro%2FELabel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filipecarneiro%2FELabel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/filipecarneiro","download_url":"https://codeload.github.com/filipecarneiro/ELabel/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251765637,"owners_count":21640216,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asp-net-core","asp-net-mvc","docker","e-label","elabel","label","qr-code","wine","wine-qr"],"created_at":"2024-11-09T04:13:38.189Z","updated_at":"2025-10-29T23:35:31.727Z","avatar_url":"https://github.com/filipecarneiro.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/img/icon.png\" width=\"100\" height=\"100\" alt=\"Open E-Label icon\"\u003e\n\u003c/div\u003e\n\n\u003cbr/\u003e\n\n[![GitHub License](https://img.shields.io/github/license/filipecarneiro/ELabel)](https://github.com/filipecarneiro/ELabel/blob/main/LICENSE.txt)\n[![ASP.NET Core](https://img.shields.io/badge/ASP.NET_Core-8.0-blue)](https://learn.microsoft.com/en-us/aspnet/core/?view=aspnetcore-8.0)\n[![Docker Image](https://img.shields.io/badge/Docker-Image-blue?link=https%3A%2F%2Fhub.docker.com%2Fr%2Ffcarneiro%2Felabel)](https://hub.docker.com/repository/docker/fcarneiro/elabel/general)\n[![Lokalise progress](https://img.shields.io/badge/Lokalise-100%25-FF6336)](https://app.lokalise.com/public/811531676572f985a58773.20133510/)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com)\n\n# Open E-Label\n\nOpen-source solution for **electronic labels** on **wine** bottles.\n\nThe Open E-Label project aims to provide a standardized and open-source solution for **QR Code** labeling on products sold within the European Union. This initiative seeks to enhance transparency, efficiency, and information accessibility in the wine industry.\n\nElectronic labels provide ***allergy***, ***energy***, ***ingredient*** and ***nutritional information*** to consumers.\n\nWe believe that technology to provide non-commercial nutrition information to benefit consumers should be made available for free.\n\n[\u003cimg title=\"Bulgarian\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/bg.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=781)\n[\u003cimg title=\"Croatian\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/hr.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=793)\n[\u003cimg title=\"Czech\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/cz.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=765)\n[\u003cimg title=\"Danish\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/dk.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=767)\n[\u003cimg title=\"Dutch\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/nl.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=737)\n[\u003cimg title=\"English\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/gb.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=640)\n[\u003cimg title=\"Estonian\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/ee.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=10154)\n[\u003cimg title=\"Finnish\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/fi.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=768)\n[\u003cimg title=\"French\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/fr.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=673)\n[\u003cimg title=\"German\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/de.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=666)\n[\u003cimg title=\"Greek\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/gr.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=761)\n[\u003cimg title=\"Hungarian\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/hu.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=773)\n[\u003cimg title=\"Irish\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/ie.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=949)\n[\u003cimg title=\"Italian\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/it.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=734)\n[\u003cimg title=\"Latvian\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/lv.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=10153)\n[\u003cimg title=\"Lithuanian\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/lt.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=10152)\n[\u003cimg title=\"Maltese\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/mt.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=882)\n[\u003cimg title=\"Polish\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/pl.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=748)\n[\u003cimg title=\"Portuguese\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/pt.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=1057)\n[\u003cimg title=\"Romanian\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/ro.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=770)\n[\u003cimg title=\"Slovak\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/sk.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=799)\n[\u003cimg title=\"Slovene\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/si.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=10159)\n[\u003cimg title=\"Spanish\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/es.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=1056)\n[\u003cimg title=\"Swedish\" width=\"32\" height=\"18\" src=\"https://raw.githubusercontent.com/filipecarneiro/ELabel/main/wwwroot/lib/flag-icons/flags/4x3/se.svg\" target=\"_blank\" /\u003e](https://app.lokalise.com/project/811531676572f985a58773.20133510/?view=single\u0026reference_lang_id=640\u0026single_lang_id=754)\n\n## 🧾 Features\n\n- **Electronic Labeling**: Replacing traditional paper labels with electronic labels, promoting sustainability and reducing waste.\n- **Multilingual Support**: Ensuring labels can be displayed in multiple languages to accommodate diverse consumers within the EU.\n- **Regulatory Compliance**: Adhering to EU regulations regarding wine labeling, providing a platform that streamlines compliance for wineries.\n\n## 📖 EU Regulations\n\nRegulations (EU) of the European Parliament and of the Council:\n\n- [EU 2021/2117](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A02021R2117-20211206) amending Regulations:\n\t- [EU 1308/2013](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A02013R1308-20231208\u0026qid=1701283989850) establishing a common organisation of the markets in agricultural products\n\t- [EU 1151/2012](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A02012R1151-20220608\u0026qid=1701284230571) on quality schemes for agricultural products and foodstuffs\n\t- [EU 251/2014](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A02014R0251-20231208\u0026qid=1701284265305) on the definition, description, presentation, labelling and the protection of geographical indications of aromatised wine products (**aromatised wine labelling**)\n\t- [EU 228/2013](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A02013R0228-20211207\u0026qid=1701284298071) laying down specific measures for agriculture in the outermost regions of the Union\n- [EU 1169/2011](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A02011R1169-20180101\u0026qid=1701362311604) provision of food information to consumers (**food labelling**)\n- [EU 2019/934](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A32019R0934\u0026qid=1701362513497) regards wine-growing areas where the alcoholic strength may be increased...\n- [EU 2019/33](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:02019R0033-20231208) regards applications for protection of designations of origin, geographical indications and traditional terms in the wine sector\n\n### Notes\n\n- [C/2023/1190](https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=OJ:C_202301190) Questions and answers on the implementation of new EU wine labelling provisions\n- [Guidance document](https://food.ec.europa.eu/system/files/2016-10/labelling_nutrition-vitamins_minerals-guidance_tolerances_1212_en.pdf) Guidance document on the tolerances for nutrition labelling purposes\n- [Guidance table](https://food.ec.europa.eu/system/files/2016-10/labelling_nutrition-vitamins_minerals-guidance_tolerances_summary_table_012013_en.pdf) Guidance document tolerances: Simplified summary table\n\n## 📱How to Use\n\n1. Scan the QR code on the wine bottle with a QR code scanner.\n2. The E-label for the wine will be displayed on your device.\n3. You can switch between languages using the language selection option on the E-label.\n\n## 🏃 Build \u0026 Run locally\n\nTo build the Open E-Label project using Visual Studio, follow these steps:\n\n1. Clone this repository to a local folder\n1. Open `ELabel.sln` solution with Visual Studio\n1. Build and start the project\n\n## 🚀 Deployment\n\nThe web app can be deployed using the [published Docker image](https://hub.docker.com/r/fcarneiro/elabel). Here are the steps to run it with Docker compose:\n\n1 Create a new directory and download `docker-compose.yml` sample:\n\n```shell\nmkdir elabel \u0026\u0026 cd elabel\nwget https://raw.githubusercontent.com/filipecarneiro/ELabel/main/docker-compose.yml\n```\n\n2 Write your passwords to an .env file (change to your own passwords!):\n\n```shell\necho \"MSSQL_SA_PASSWORD=MyStrongPassword\" \u003e\u003e .env\necho \"ADMIN_PASSWORD=MyAdminPassword\" \u003e\u003e .env\n```\n\n3 Start all containers:\n\n```shell\ndocker compose pull\ndocker compose up -d\n```\n\n4 View Logs:\n\n```shell\ndocker compose logs -f\n```\n\n`db` will take some time in the first start, so the app will restart a couple of times. Be patient!\n\nWhen you see something like `Now listening on: http://[::]:8080` on the log, open your browser with the server name or IP address.\n\n## 🙋 Contributing\n\nContributions are welcome! Please read our [contributing guidelines](CONTRIBUTING.md) before getting started.\n\n### Translation\n\nTranslations for Open E-Label are managed through [Lokalise](https://lokalise.com/), an online translation management tool.\n\nClick the link below to join the project! Even if your language is completely translated, extra proofreading is a big help! Please feel free to review the existing translations, and vote for alternatives that might be more appropriate.\n\n- [Join the E-Label translation team](https://app.lokalise.com/public/811531676572f985a58773.20133510/)\n\nFor more information about the translation editor and tools, please see the [Lokalise translate and collaborate documents](https://docs.lokalise.com/en/collections/2909016-translate-and-collaborate).\n\nTranslations are downloaded from Lokalise on every release.\nCheck the current [localization statistics](https://app.lokalise.com/statistics/811531676572f985a58773.20133510/).\n\n## ⚖️ License\n\nOpen E-Label is open-source under the MIT license. See the [LICENSE file](LICENSE.txt) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffilipecarneiro%2Felabel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffilipecarneiro%2Felabel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffilipecarneiro%2Felabel/lists"}