From 6b2a169be6bc739d3767c0e2da3afeb2ca99c9a2 Mon Sep 17 00:00:00 2001 From: Artem Date: Tue, 30 Sep 2025 17:48:50 +0300 Subject: [PATCH 01/22] feat: refactore the structure --- {qrcodeprofile => qrcoder}/.dockerignore | 0 {qrcodeprofile => qrcoder}/.gitignore | 0 {qrcodeprofile => qrcoder}/Apps/ProfileApp.cs | 0 {qrcodeprofile => qrcoder}/Dockerfile | 10 +++++----- {qrcodeprofile => qrcoder}/GlobalUsings.cs | 2 +- {qrcodeprofile => qrcoder}/Program.cs | 0 .../QrCodeExample.csproj | 2 +- .../QrCodeProfile.sln => qrcoder/QrCoderExample.sln | 2 +- {qrcodeprofile => qrcoder}/README.md | 0 {qrcodeprofile => qrcoder}/Services/IQrCodeService.cs | 0 {qrcodeprofile => qrcoder}/Services/QrCodeService.cs | 0 11 files changed, 8 insertions(+), 8 deletions(-) rename {qrcodeprofile => qrcoder}/.dockerignore (100%) rename {qrcodeprofile => qrcoder}/.gitignore (100%) rename {qrcodeprofile => qrcoder}/Apps/ProfileApp.cs (100%) rename {qrcodeprofile => qrcoder}/Dockerfile (62%) rename {qrcodeprofile => qrcoder}/GlobalUsings.cs (97%) rename {qrcodeprofile => qrcoder}/Program.cs (100%) rename qrcodeprofile/QrCodeProfile.csproj => qrcoder/QrCodeExample.csproj (92%) rename qrcodeprofile/QrCodeProfile.sln => qrcoder/QrCoderExample.sln (87%) rename {qrcodeprofile => qrcoder}/README.md (100%) rename {qrcodeprofile => qrcoder}/Services/IQrCodeService.cs (100%) rename {qrcodeprofile => qrcoder}/Services/QrCodeService.cs (100%) diff --git a/qrcodeprofile/.dockerignore b/qrcoder/.dockerignore similarity index 100% rename from qrcodeprofile/.dockerignore rename to qrcoder/.dockerignore diff --git a/qrcodeprofile/.gitignore b/qrcoder/.gitignore similarity index 100% rename from qrcodeprofile/.gitignore rename to qrcoder/.gitignore diff --git a/qrcodeprofile/Apps/ProfileApp.cs b/qrcoder/Apps/ProfileApp.cs similarity index 100% rename from qrcodeprofile/Apps/ProfileApp.cs rename to qrcoder/Apps/ProfileApp.cs diff --git a/qrcodeprofile/Dockerfile b/qrcoder/Dockerfile similarity index 62% rename from qrcodeprofile/Dockerfile rename to qrcoder/Dockerfile index 6d459687..01d596e7 100644 --- a/qrcodeprofile/Dockerfile +++ b/qrcoder/Dockerfile @@ -9,17 +9,17 @@ ARG BUILD_CONFIGURATION=Release WORKDIR /src # Copy and restore -COPY ["QrCodeProfile.csproj", "./"] -RUN dotnet restore "QrCodeProfile.csproj" +COPY ["QrCoderExample.csproj", "./"] +RUN dotnet restore "QrCoderExample.csproj" # Copy everything and build COPY . . -RUN dotnet build "QrCodeProfile.csproj" -c $BUILD_CONFIGURATION -o /app/build +RUN dotnet build "QrCoderExample.csproj" -c $BUILD_CONFIGURATION -o /app/build # Publish stage FROM build AS publish ARG BUILD_CONFIGURATION=Release -RUN dotnet publish "QrCodeProfile.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=true +RUN dotnet publish "QrCoderExample.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=true # Final runtime image FROM base AS final @@ -31,4 +31,4 @@ ENV PORT=80 ENV ASPNETCORE_URLS="http://+:80" # Run the executable -ENTRYPOINT ["dotnet","./QrCodeProfile.dll"] \ No newline at end of file +ENTRYPOINT ["dotnet","./QrCoderExample.dll"] \ No newline at end of file diff --git a/qrcodeprofile/GlobalUsings.cs b/qrcoder/GlobalUsings.cs similarity index 97% rename from qrcodeprofile/GlobalUsings.cs rename to qrcoder/GlobalUsings.cs index 9e8372aa..80ca324e 100644 --- a/qrcodeprofile/GlobalUsings.cs +++ b/qrcoder/GlobalUsings.cs @@ -25,4 +25,4 @@ global using System.Globalization; global using System.Reactive.Linq; -namespace QrCodeProfile; +namespace QrCodeExample; diff --git a/qrcodeprofile/Program.cs b/qrcoder/Program.cs similarity index 100% rename from qrcodeprofile/Program.cs rename to qrcoder/Program.cs diff --git a/qrcodeprofile/QrCodeProfile.csproj b/qrcoder/QrCodeExample.csproj similarity index 92% rename from qrcodeprofile/QrCodeProfile.csproj rename to qrcoder/QrCodeExample.csproj index 674f2266..d17b4f61 100644 --- a/qrcodeprofile/QrCodeProfile.csproj +++ b/qrcoder/QrCodeExample.csproj @@ -6,7 +6,7 @@ enable enable CS8618;CS8603;CS8602;CS8604;CS9113 - QrCodeProfile + QrCoderExample diff --git a/qrcodeprofile/QrCodeProfile.sln b/qrcoder/QrCoderExample.sln similarity index 87% rename from qrcodeprofile/QrCodeProfile.sln rename to qrcoder/QrCoderExample.sln index 1f26f9ec..35812682 100644 --- a/qrcodeprofile/QrCodeProfile.sln +++ b/qrcoder/QrCoderExample.sln @@ -2,7 +2,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.2.0 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hello", "QrCodeProfile.csproj", "{039638F3-A6D7-FB67-E733-27BD896EFDC4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QrCodeExample", "QrCodeExample.csproj", "{039638F3-A6D7-FB67-E733-27BD896EFDC4}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/qrcodeprofile/README.md b/qrcoder/README.md similarity index 100% rename from qrcodeprofile/README.md rename to qrcoder/README.md diff --git a/qrcodeprofile/Services/IQrCodeService.cs b/qrcoder/Services/IQrCodeService.cs similarity index 100% rename from qrcodeprofile/Services/IQrCodeService.cs rename to qrcoder/Services/IQrCodeService.cs diff --git a/qrcodeprofile/Services/QrCodeService.cs b/qrcoder/Services/QrCodeService.cs similarity index 100% rename from qrcodeprofile/Services/QrCodeService.cs rename to qrcoder/Services/QrCodeService.cs From 684f3051eb73e96efe37611dd52d976d7f46bc22 Mon Sep 17 00:00:00 2001 From: Artem Date: Tue, 30 Sep 2025 18:11:33 +0300 Subject: [PATCH 02/22] feat: update README.md --- qrcoder/README.md | 64 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 9 deletions(-) diff --git a/qrcoder/README.md b/qrcoder/README.md index 37a05000..0228939d 100644 --- a/qrcoder/README.md +++ b/qrcoder/README.md @@ -1,17 +1,63 @@ -# Hello +# QR Code Generator -Web application created using [Ivy](https://github.com/Ivy-Interactive/Ivy). +## Created Using Ivy + +Web application created using [Ivy](https://github.com/Ivy-Interactive/Ivy-Framework). + +**Ivy** - The ultimate framework for building internal tools with LLM code generation by unifying front-end and back-end into a single C# codebase. With Ivy, you can build robust internal tools and dashboards using C# and AI assistance based on your existing database. Ivy is a web framework for building interactive web applications using C# and .NET. -## Run +## Interactive Example For QR code generation -``` -dotnet watch -``` +This example demonstrates QR code generation using the [QRCoder library](https://github.com/codebude/QRCoder) integrated with Ivy. QRCoder is a pure C# Open Source. -## Deploy +**What This Application Does:** -``` +This specific implementation creates a **Profile Creator** application that allows users to: + +- **Create User Profiles**: Fill out a form with personal information (name, email, phone, LinkedIn, GitHub) +- **Generate vCard QR Codes**: Automatically creates contact cards (vCard format) encoded in QR codes +- **Share Contact Information**: Users can scan the generated QR code to automatically add the contact to their phone +- **Real-time Form Validation**: Validates email format and URL patterns for LinkedIn/GitHub profiles +- **Interactive UI**: Split-panel layout with form on the left and QR code preview on the right + +**Technical Implementation:** + +- Uses QRCoder's vCard payload generator for structured contact data +- Generates Base64-encoded PNG images for web display +- Implements form validation with custom rules +- Creates resizable panel layout for optimal user experience +- Handles form submission with loading states and error display + +## Screenshot + +![QR Code Generation Example](image.png) + +## How to Run + +1. **Prerequisites**: .NET 8+ SDK +2. **Navigate to the example**: + ```bash + cd qrcoder + ``` +3. **Restore dependencies**: + ```bash + dotnet restore + ``` +4. **Run the application**: + ```bash + dotnet watch + ``` +5. **Open your browser** to the URL shown in the terminal (typically `http://localhost:5010`) + +## How to Deploy + +Deploy this example to Ivy's hosting platform: + +```bash +cd qrcoder ivy deploy -``` \ No newline at end of file +``` + +This will deploy your QR code generation application with a single command. \ No newline at end of file From 96ebdc86a3c0b17fb704ea8aa501432a0a0ddce0 Mon Sep 17 00:00:00 2001 From: Artem Date: Tue, 30 Sep 2025 18:21:28 +0300 Subject: [PATCH 03/22] feat: add info about ivy and qrcoder --- qrcoder/Apps/ProfileApp.cs | 4 ++++ qrcoder/README.md | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/qrcoder/Apps/ProfileApp.cs b/qrcoder/Apps/ProfileApp.cs index b7274a95..65e9ec34 100644 --- a/qrcoder/Apps/ProfileApp.cs +++ b/qrcoder/Apps/ProfileApp.cs @@ -74,6 +74,10 @@ async void HandleSubmit() | new Button("Create Profile").HandleClick(new Action(HandleSubmit)) .Loading(loading).Disabled(loading) | validationView + + | new Separator() + | Text.Small("This demo uses QRCoder library to generate vCard QR codes for contact sharing.") + | Text.Markdown("Built with [Ivy Framework](https://github.com/Ivy-Interactive/Ivy-Framework) and [QRCoder](https://github.com/codebude/QRCoder)") ).Height(Size.Full()); // Main content - QR Code display diff --git a/qrcoder/README.md b/qrcoder/README.md index 0228939d..3ab695e9 100644 --- a/qrcoder/README.md +++ b/qrcoder/README.md @@ -2,7 +2,7 @@ ## Created Using Ivy -Web application created using [Ivy](https://github.com/Ivy-Interactive/Ivy-Framework). +Web application created using [Ivy-Framework](https://github.com/Ivy-Interactive/Ivy-Framework). **Ivy** - The ultimate framework for building internal tools with LLM code generation by unifying front-end and back-end into a single C# codebase. With Ivy, you can build robust internal tools and dashboards using C# and AI assistance based on your existing database. From e1555e4eaf77e9001f6f18fe7c9b42c69ed4db63 Mon Sep 17 00:00:00 2001 From: Artem Lazarchuk <131264474+ArtemLazarchuk@users.noreply.github.com> Date: Tue, 30 Sep 2025 18:30:18 +0300 Subject: [PATCH 04/22] Update README.md --- qrcoder/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/qrcoder/README.md b/qrcoder/README.md index 3ab695e9..a518155e 100644 --- a/qrcoder/README.md +++ b/qrcoder/README.md @@ -32,7 +32,8 @@ This specific implementation creates a **Profile Creator** application that allo ## Screenshot -![QR Code Generation Example](image.png) +image + ## How to Run @@ -60,4 +61,4 @@ cd qrcoder ivy deploy ``` -This will deploy your QR code generation application with a single command. \ No newline at end of file +This will deploy your QR code generation application with a single command. From f63caf0cbbd35fa6722e400c3714e4b487c75df3 Mon Sep 17 00:00:00 2001 From: Artem Date: Wed, 1 Oct 2025 13:20:55 +0300 Subject: [PATCH 05/22] feat: fix UI --- qrcoder/Apps/ProfileApp.cs | 3 --- qrcoder/{QrCodeExample.csproj => QrCoderExample.csproj} | 0 2 files changed, 3 deletions(-) rename qrcoder/{QrCodeExample.csproj => QrCoderExample.csproj} (100%) diff --git a/qrcoder/Apps/ProfileApp.cs b/qrcoder/Apps/ProfileApp.cs index 65e9ec34..01733d77 100644 --- a/qrcoder/Apps/ProfileApp.cs +++ b/qrcoder/Apps/ProfileApp.cs @@ -68,14 +68,11 @@ async void HandleSubmit() Layout.Vertical().Gap(6).Padding(2) | Text.H2("Create Your Profile") | Text.Block("Fill in your information to create a shareable profile") - | new Separator() | formView | Layout.Horizontal() | new Button("Create Profile").HandleClick(new Action(HandleSubmit)) .Loading(loading).Disabled(loading) | validationView - - | new Separator() | Text.Small("This demo uses QRCoder library to generate vCard QR codes for contact sharing.") | Text.Markdown("Built with [Ivy Framework](https://github.com/Ivy-Interactive/Ivy-Framework) and [QRCoder](https://github.com/codebude/QRCoder)") ).Height(Size.Full()); diff --git a/qrcoder/QrCodeExample.csproj b/qrcoder/QrCoderExample.csproj similarity index 100% rename from qrcoder/QrCodeExample.csproj rename to qrcoder/QrCoderExample.csproj From 119ed16fdb28e64897ef37864d2bb0f3641de9c2 Mon Sep 17 00:00:00 2001 From: Artem Date: Wed, 1 Oct 2025 13:40:41 +0300 Subject: [PATCH 06/22] feat: update README.md --- qrcoder/README.md | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/qrcoder/README.md b/qrcoder/README.md index a518155e..97473c6e 100644 --- a/qrcoder/README.md +++ b/qrcoder/README.md @@ -1,5 +1,7 @@ # QR Code Generator +image + ## Created Using Ivy Web application created using [Ivy-Framework](https://github.com/Ivy-Interactive/Ivy-Framework). @@ -30,11 +32,6 @@ This specific implementation creates a **Profile Creator** application that allo - Creates resizable panel layout for optimal user experience - Handles form submission with loading states and error display -## Screenshot - -image - - ## How to Run 1. **Prerequisites**: .NET 8+ SDK @@ -56,9 +53,14 @@ This specific implementation creates a **Profile Creator** application that allo Deploy this example to Ivy's hosting platform: -```bash -cd qrcoder -ivy deploy -``` - +1. **Navigate to the example**: + ```bash + cd qrcoder + ``` +2. **Deploy to Ivy hosting**: + ```bash + ivy deploy + ``` This will deploy your QR code generation application with a single command. + +## For more details, see the [Ivy Documentation](https://docs.ivy.app) \ No newline at end of file From 95cea3189158bc023f97459fbdf2c648f9147f50 Mon Sep 17 00:00:00 2001 From: Artem Date: Wed, 1 Oct 2025 17:21:12 +0300 Subject: [PATCH 07/22] feat: add devcontainer configuration --- .devcontainer/devcontainer.json | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..89d696aa --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,28 @@ +{ + "name": "Ivy Examples", + "image": "mcr.microsoft.com/dotnet/sdk:9.0", + "features": {}, + "postCreateCommand": "dotnet tool install -g Ivy.Console", + "postStartCommand": "dotnet watch run", + "forwardPorts": [5010], + "portsAttributes": { + "5010": { + "label": "Ivy", + "onAutoForward": "openPreview" + } + }, + "customizations": { + "vscode": { + "settings": { + "dotnet.defaultSolution": "**/*.sln", + "terminal.integrated.shell.linux": "/bin/bash" + }, + "extensions": [ + "ms-dotnettools.csharp", + "ms-vscode.powershell", + "ms-dotnettools.csdevkit" + ] + } + } + } + \ No newline at end of file From 2ca0419670393ac0e1a43655057f76e46a717ed8 Mon Sep 17 00:00:00 2001 From: Artem Date: Wed, 1 Oct 2025 17:40:34 +0300 Subject: [PATCH 08/22] feat: update README.md --- qrcoder/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/qrcoder/README.md b/qrcoder/README.md index 97473c6e..cc70c31d 100644 --- a/qrcoder/README.md +++ b/qrcoder/README.md @@ -32,6 +32,18 @@ This specific implementation creates a **Profile Creator** application that allo - Creates resizable panel layout for optimal user experience - Handles form submission with loading states and error display +## One-Click Development Environment + +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=Ivy-Interactive%2FIvy-Examples&machine=standardLinux32gb&devcontainer_path=.devcontainer%2Fdevcontainer.json&location=EuropeWest) + + +Click the badge above to open Ivy Examples repository in GitHub Codespaces with: +- **.NET 9.0** SDK pre-installed +- **All Ivy Examples** available for exploration +- **Navigate to `qrcoder` folder** to run this QR Code Generator +- **Ready-to-run** development environment +- **No local setup** required + ## How to Run 1. **Prerequisites**: .NET 8+ SDK From 8bd1935d177663e1a95283c3da0741c112d047fc Mon Sep 17 00:00:00 2001 From: Artem Date: Thu, 2 Oct 2025 13:03:10 +0300 Subject: [PATCH 09/22] feat: attempt start --- qrcoder/.devcontainer/devcontainer.json | 29 +++++++++++++++++++++++++ qrcoder/README.md | 3 +-- 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 qrcoder/.devcontainer/devcontainer.json diff --git a/qrcoder/.devcontainer/devcontainer.json b/qrcoder/.devcontainer/devcontainer.json new file mode 100644 index 00000000..acb4df96 --- /dev/null +++ b/qrcoder/.devcontainer/devcontainer.json @@ -0,0 +1,29 @@ +{ + "name": "QR Code Generator", + "image": "mcr.microsoft.com/dotnet/sdk:9.0", + "features": {}, + "postCreateCommand": "dotnet tool install -g Ivy.Console", + "postStartCommand": "cd /workspaces/Ivy-Examples/qrcoder && dotnet watch run", + "forwardPorts": [5010], + "portsAttributes": { + "5010": { + "label": "Ivy QR Code Generator", + "onAutoForward": "openPreview" + } + }, + "customizations": { + "vscode": { + "settings": { + "dotnet.defaultSolution": "/workspaces/Ivy-Examples/qrcoder/*.sln", + "terminal.integrated.shell.linux": "/bin/bash", + "terminal.integrated.cwd": "/workspaces/Ivy-Examples/qrcoder" + }, + "extensions": [ + "ms-dotnettools.csharp", + "ms-vscode.powershell", + "ms-dotnettools.csdevkit" + ] + } + }, + "workspaceFolder": "/workspaces/Ivy-Examples/qrcoder" +} diff --git a/qrcoder/README.md b/qrcoder/README.md index cc70c31d..4f2655dd 100644 --- a/qrcoder/README.md +++ b/qrcoder/README.md @@ -34,8 +34,7 @@ This specific implementation creates a **Profile Creator** application that allo ## One-Click Development Environment -[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=Ivy-Interactive%2FIvy-Examples&machine=standardLinux32gb&devcontainer_path=.devcontainer%2Fdevcontainer.json&location=EuropeWest) - +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=refactor-structure-for-qrcoder&repo=ArtemLazarchuk%2FIvy-Examples&machine=standardLinux32gb&devcontainer_path=qrcoder%2F.devcontainer%2Fdevcontainer.json&location=EuropeWest) Click the badge above to open Ivy Examples repository in GitHub Codespaces with: - **.NET 9.0** SDK pre-installed From 6d09867cd388b1124c327ff29f735143688f3b64 Mon Sep 17 00:00:00 2001 From: Artem Date: Thu, 2 Oct 2025 20:15:35 +0300 Subject: [PATCH 10/22] feat: update devcontainer.json --- .devcontainer/devcontainer.json | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 89d696aa..54e264c4 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,28 +1,27 @@ { - "name": "Ivy Examples", + "name": "QR Code Generator", "image": "mcr.microsoft.com/dotnet/sdk:9.0", "features": {}, + "workspaceFolder": "/workspaces/Ivy-Examples/qrcoder", "postCreateCommand": "dotnet tool install -g Ivy.Console", "postStartCommand": "dotnet watch run", "forwardPorts": [5010], "portsAttributes": { "5010": { - "label": "Ivy", + "label": "QR Code Generator", "onAutoForward": "openPreview" } }, "customizations": { "vscode": { - "settings": { - "dotnet.defaultSolution": "**/*.sln", - "terminal.integrated.shell.linux": "/bin/bash" - }, "extensions": [ "ms-dotnettools.csharp", "ms-vscode.powershell", "ms-dotnettools.csdevkit" ] + }, + "codespaces": { + "openFiles": ["Apps/ProfileApp.cs"] } } - } - \ No newline at end of file + } \ No newline at end of file From 9b8b8df3c26043eaa7eb8bb8dfa05926e196cc77 Mon Sep 17 00:00:00 2001 From: Artem Date: Thu, 2 Oct 2025 20:18:28 +0300 Subject: [PATCH 11/22] feat: update README.md --- qrcoder/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qrcoder/README.md b/qrcoder/README.md index 4f2655dd..64ff1293 100644 --- a/qrcoder/README.md +++ b/qrcoder/README.md @@ -34,7 +34,7 @@ This specific implementation creates a **Profile Creator** application that allo ## One-Click Development Environment -[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=refactor-structure-for-qrcoder&repo=ArtemLazarchuk%2FIvy-Examples&machine=standardLinux32gb&devcontainer_path=qrcoder%2F.devcontainer%2Fdevcontainer.json&location=EuropeWest) +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=Ivy-Interactive%2FIvy-Examples&machine=standardLinux32gb&devcontainer_path=.devcontainer%2Fdevcontainer.json&location=EuropeWest) Click the badge above to open Ivy Examples repository in GitHub Codespaces with: - **.NET 9.0** SDK pre-installed From 45e413dc1c7f3e714e181818eda033cc5c7b4496 Mon Sep 17 00:00:00 2001 From: Artem Date: Thu, 2 Oct 2025 20:41:42 +0300 Subject: [PATCH 12/22] feat: edit path for devcontainer --- .devcontainer/{ => qcoder}/devcontainer.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .devcontainer/{ => qcoder}/devcontainer.json (100%) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/qcoder/devcontainer.json similarity index 100% rename from .devcontainer/devcontainer.json rename to .devcontainer/qcoder/devcontainer.json From b02372192b76c8641fb47f7d3d91bacddc1ddc48 Mon Sep 17 00:00:00 2001 From: Artem Date: Thu, 2 Oct 2025 20:42:26 +0300 Subject: [PATCH 13/22] feat: update README.md --- qrcoder/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qrcoder/README.md b/qrcoder/README.md index 64ff1293..4528e571 100644 --- a/qrcoder/README.md +++ b/qrcoder/README.md @@ -34,7 +34,7 @@ This specific implementation creates a **Profile Creator** application that allo ## One-Click Development Environment -[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=Ivy-Interactive%2FIvy-Examples&machine=standardLinux32gb&devcontainer_path=.devcontainer%2Fdevcontainer.json&location=EuropeWest) +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=Ivy-Interactive%2FIvy-Examples&machine=standardLinux32gb&devcontainer_path=.devcontainer%2Fqrcoder%2Fdevcontainer.json&location=EuropeWest) Click the badge above to open Ivy Examples repository in GitHub Codespaces with: - **.NET 9.0** SDK pre-installed From a8f1e46eb761a97cce6e00b6d7a515824e9cc334 Mon Sep 17 00:00:00 2001 From: Artem Date: Thu, 2 Oct 2025 20:44:22 +0300 Subject: [PATCH 14/22] feat: remove devcontainer.json in qrcoder --- qrcoder/.devcontainer/devcontainer.json | 29 ------------------------- 1 file changed, 29 deletions(-) delete mode 100644 qrcoder/.devcontainer/devcontainer.json diff --git a/qrcoder/.devcontainer/devcontainer.json b/qrcoder/.devcontainer/devcontainer.json deleted file mode 100644 index acb4df96..00000000 --- a/qrcoder/.devcontainer/devcontainer.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "QR Code Generator", - "image": "mcr.microsoft.com/dotnet/sdk:9.0", - "features": {}, - "postCreateCommand": "dotnet tool install -g Ivy.Console", - "postStartCommand": "cd /workspaces/Ivy-Examples/qrcoder && dotnet watch run", - "forwardPorts": [5010], - "portsAttributes": { - "5010": { - "label": "Ivy QR Code Generator", - "onAutoForward": "openPreview" - } - }, - "customizations": { - "vscode": { - "settings": { - "dotnet.defaultSolution": "/workspaces/Ivy-Examples/qrcoder/*.sln", - "terminal.integrated.shell.linux": "/bin/bash", - "terminal.integrated.cwd": "/workspaces/Ivy-Examples/qrcoder" - }, - "extensions": [ - "ms-dotnettools.csharp", - "ms-vscode.powershell", - "ms-dotnettools.csdevkit" - ] - } - }, - "workspaceFolder": "/workspaces/Ivy-Examples/qrcoder" -} From 7def192677d99fdae165f416e7aaf08497b1dfd5 Mon Sep 17 00:00:00 2001 From: Artem Date: Thu, 2 Oct 2025 20:54:28 +0300 Subject: [PATCH 15/22] feat: add html in page --- qrcoder/Apps/ProfileApp.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/qrcoder/Apps/ProfileApp.cs b/qrcoder/Apps/ProfileApp.cs index 01733d77..b3986cc5 100644 --- a/qrcoder/Apps/ProfileApp.cs +++ b/qrcoder/Apps/ProfileApp.cs @@ -75,6 +75,13 @@ async void HandleSubmit() | validationView | Text.Small("This demo uses QRCoder library to generate vCard QR codes for contact sharing.") | Text.Markdown("Built with [Ivy Framework](https://github.com/Ivy-Interactive/Ivy-Framework) and [QRCoder](https://github.com/codebude/QRCoder)") + | new Html(@" +
+ + + +
+ ") ).Height(Size.Full()); // Main content - QR Code display From a7855b947353f7d05e8a6cdbe2adf14e66e5f066 Mon Sep 17 00:00:00 2001 From: Artem Date: Thu, 2 Oct 2025 21:13:12 +0300 Subject: [PATCH 16/22] feat: update README.md --- qrcoder/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qrcoder/README.md b/qrcoder/README.md index 4528e571..7bddae5c 100644 --- a/qrcoder/README.md +++ b/qrcoder/README.md @@ -1,6 +1,6 @@ # QR Code Generator -image +image ## Created Using Ivy From 8f5c07b1e261dbe65f52c07f1db8effd6567bd8f Mon Sep 17 00:00:00 2001 From: Artem Date: Fri, 3 Oct 2025 14:13:39 +0300 Subject: [PATCH 17/22] feat: add automatic server hot reload --- .devcontainer/qcoder/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/qcoder/devcontainer.json b/.devcontainer/qcoder/devcontainer.json index 54e264c4..5f92356e 100644 --- a/.devcontainer/qcoder/devcontainer.json +++ b/.devcontainer/qcoder/devcontainer.json @@ -4,7 +4,7 @@ "features": {}, "workspaceFolder": "/workspaces/Ivy-Examples/qrcoder", "postCreateCommand": "dotnet tool install -g Ivy.Console", - "postStartCommand": "dotnet watch run", + "postStartCommand": "dotnet watch", "forwardPorts": [5010], "portsAttributes": { "5010": { From 750fce28eb4a9995346303766be6b2bed4498311 Mon Sep 17 00:00:00 2001 From: Artem Date: Fri, 3 Oct 2025 18:57:48 +0300 Subject: [PATCH 18/22] feat: add button "Open in GitHub Codespaces" in header --- qrcoder/Program.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/qrcoder/Program.cs b/qrcoder/Program.cs index 41d042d0..d9ea1d9d 100644 --- a/qrcoder/Program.cs +++ b/qrcoder/Program.cs @@ -7,6 +7,17 @@ #endif server.AddAppsFromAssembly(); server.AddConnectionsFromAssembly(); -var chromeSettings = new ChromeSettings().DefaultApp().UseTabs(preventDuplicates: true); +var customHeader = Layout.Vertical().Gap(2) + | new Html(@" +
+ + + +
+ "); +var chromeSettings = new ChromeSettings() + .DefaultApp() + .UseTabs(preventDuplicates: true) + .Header(customHeader); server.UseChrome(chromeSettings); await server.RunAsync(); \ No newline at end of file From af3994c7d86680e39332680ee608898a0cf76b9b Mon Sep 17 00:00:00 2001 From: Artem Date: Sat, 4 Oct 2025 18:11:52 +0300 Subject: [PATCH 19/22] feat: remove button with page --- qrcoder/Apps/ProfileApp.cs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/qrcoder/Apps/ProfileApp.cs b/qrcoder/Apps/ProfileApp.cs index b3986cc5..01733d77 100644 --- a/qrcoder/Apps/ProfileApp.cs +++ b/qrcoder/Apps/ProfileApp.cs @@ -75,13 +75,6 @@ async void HandleSubmit() | validationView | Text.Small("This demo uses QRCoder library to generate vCard QR codes for contact sharing.") | Text.Markdown("Built with [Ivy Framework](https://github.com/Ivy-Interactive/Ivy-Framework) and [QRCoder](https://github.com/codebude/QRCoder)") - | new Html(@" -
- - - -
- ") ).Height(Size.Full()); // Main content - QR Code display From 2c2d24634fc4e6b88c85af0aeff950eb8a13b23a Mon Sep 17 00:00:00 2001 From: Artem Date: Sat, 4 Oct 2025 19:02:35 +0300 Subject: [PATCH 20/22] feat: update README.md --- qrcoder/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qrcoder/README.md b/qrcoder/README.md index 7bddae5c..1a26e968 100644 --- a/qrcoder/README.md +++ b/qrcoder/README.md @@ -1,6 +1,6 @@ # QR Code Generator -image +image ## Created Using Ivy From c48f1ba0c876d72698beb5f84b77bb396f6f7669 Mon Sep 17 00:00:00 2001 From: Artem Date: Sat, 4 Oct 2025 19:21:07 +0300 Subject: [PATCH 21/22] feat: update README.md --- qrcoder/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/qrcoder/README.md b/qrcoder/README.md index 1a26e968..094d7828 100644 --- a/qrcoder/README.md +++ b/qrcoder/README.md @@ -1,6 +1,7 @@ # QR Code Generator -image +image + ## Created Using Ivy From aa2f724db48652345d9a3d40a094326b0b3fc5d6 Mon Sep 17 00:00:00 2001 From: Artem Date: Sun, 5 Oct 2025 20:18:49 +0300 Subject: [PATCH 22/22] feat: rename file from qcoder to qrcoder --- .devcontainer/{qcoder => qrcoder}/devcontainer.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .devcontainer/{qcoder => qrcoder}/devcontainer.json (100%) diff --git a/.devcontainer/qcoder/devcontainer.json b/.devcontainer/qrcoder/devcontainer.json similarity index 100% rename from .devcontainer/qcoder/devcontainer.json rename to .devcontainer/qrcoder/devcontainer.json