Our modernized learning path for our students, makes it easier for us to track mischief. If they use our Dobby bot and ask for a uspisicous spell or potion, we as teachers would like to know. We wouldn’t risk a to develop an evil wizard again would we.
We are able to track these mischievs in our solution, but we also want the students to take accountability.
That’s where Oneflow came to the rescue. Its seamless integration with Dynamics allowed us to manage mischievement contracts directly within our solution. Students can now sign their “I must not tell lies” agreements with ease, and we can monitor every step—from creation to completion—all in one place.
The contract gets created in Power Automate containing the student’s full name, and is dynamically mapped to the mischief record and sent to the student.
When the student sign the contract, we can automate our solution by utilizing the powerful OneFlow trigger to update the Mischievement status to “Resolved”.
We use Svelte 5 (+SvelteKit) as our full-stack framework, which produces near-native JavaScript bundle sizes.
SvelteKit renders content on the server by default, minimizing client overhead and keeps environment variables safe and secure.
We use Tailwind CSS to style our application which produces an incredibly small CSS file by carefully compiling only the CSS actually used into single file.
State Management
To handle user state we utilize SvelteKit hooks and the msal node library to authenticate and authorize requests. Hooks run on every request to the server and provides information about the request and user state.
As a first layer of protection we check if requested path is within a user-only part of our application. If no user is signed the application will redirect the user to a login flow which redirects the user back to the original URL if successful.
For the second layer of protection we check if the request URL is towards our Dataverse instance, and if so we try to silently acquire an Access token, which is then used as the Authorization Header.
If the token acquisision fails, the user is redirected to an interactive login flow.
Badge #2 – Thieving Bastards
MSAL Node
We use MSAL node to authenticate users and authorize requests made our Dataverse instance.
Tailwind CSS
To style our application we use Tailwind CSS which is a modern utility-based approach to use CSS.
MELT UI
Melt is a low-level UI library that provides powerful API’s that abstracts a lot of the difficult parts about accessability, while being compltely unstyled so we as developers can create unique components to our app.
AI-sdk + Zod
Documented in Crawler badge below.
Badge #3 – Crawler
We have created an AI-chat instance using ai-sdk package from Vercel that the user can interact with in natural language. This package also uses Zod, the most popular JS validation library, to validate that parameters are in the correct format.
The assistant is instructed to recognize certain requests from the user and can call respective API’s based on the request.
In this instance, Dobby recognized that the student was looking for a spell with an exploding effect.
Helping a team with a workaround for activating Microsoft Free Trial Capacity when not working in CDX trial environment 😰
Helping with creating a multitenant service principle using client id and client secret, and use of Dynamics 365 CRM access in Azure. And using another tenant for Fabric Free Trial capacity and use Dynamics 365 connector in Fabric to retrieve data from the CDX tenant.
Our solution is all about making learning magic easier and more accessible for young wizards and witches out there. For this to succeed, the courses need to stay up to date and relevant. Since updating subject curriculums with new potions and spells everytime something new comes out is time consuming and not something the teachers can be bothered to do between flying their brooms, watching games of Quidditch, and saving the world from Dark Magic, we figured out that we needed to solve this problem for them.
Retriving data in Fabric using Data Pipelines
We are using external data sources from Potter DB (potions & spells) and importing them into Microsoft Fabric with Data Pipelines, storing them in a datalake.
A copy data step in Data Pipeline retrieves data form external data source:
Stores the data in our lakehouse in a table called Potions:
Maps all fields from the external source and to the destination table:
Retrives data from the Potions table in our lakehouse that has been updated from an external source, and later used to import to Dataverse:
Using Service Principle to connect to our Dataverse Environment and upserting (update or create) records in our Dataverse Potion table:
Mapping the fields from the Datalake and the Dataverse table and upserting it to Dataverse:
After running the pipelines it updates our Potions table in Dataverse:
And there we have it, no need for teachers and staff to stay updated on the release waves for new spells and potions, it will all be automatically updated in the systems and arriving straight to everyone’s Mystic Mentor app.
That calls for the Dataminer badge, doesn’t it? 🪨⛏️
We couldn’t keep looking at Sopranova’s camp, with a sad Harry Potter coffee mug as the only prop to lift the team’s spirits. Since we have been gathering magical decor for weeks, we decided to be good community members and share some of our goods with them!
The look on their faces was a reward enough for itself, but of course – we wouldn’t mind the Community Champion badge for this kind gesture. 🥰
We in EVIDIosa have prepped and packed our hats and wands, our magical monitors and spell makers (aka computers), to set up an enchanting environment ready to create magic. 🪄 For precautionary matters we also brought a tablecloth, as we know that coffee, redbull and other wizardly drinks might get spilled in the heat of the game!
We are looking forward to all that is to come the next days, and with this blogpost we also want to claim the “Happy Camper” badge. 🏕️
It’s EVIDIosa, Not Leviosa: Claiming the “Early Delivery” Badge
In the uncertain times we live in, we have seen a great need for digitalization at Hogwarts. Whether it is the return of Voldemort, a new pandemic, or trolls invading the school premises, it is important to provide the students with a learning platform in case of a lockdown. This led to the creation of Hogverse🎓
What do we know? 👇
… that we never know what to expect 😰
the return of Voldemort 🪄???
trolls invading the school premises 🧌???
a new pandemic 😷????
… and students find the classes quite boring …
What do we need? 👇
modernize our teaching 👩🏫
arrange for potential lockdown 🚫
gamification 🎮
streamline training 🔁
How do we do it? 👇 Online course portal
Online course portal
Your-own-Hermione-bot to help you with spells 🤖
Gamified learning paths using AI 🕹️
The teachers own app for admin and overview
Dataflows and dasboards to retrive vital information
Robust ALM for strong and reliable solution
Meet the Team
The team is ready to deliver and get our hands dirty🤓
Pumbing as a Service (PLaas) – self sustaining model using the power of low code
Scenario: Mario and Luigi have traveled the word and witnessed loads of plumbing systems. The castle connoisseurs and dungeon lords are overwhelmed with leakage several times a month and expensive unreliable plumbers. They have had enough!!!!
No worries no more with SMBPlumbing! By subscribing to our service, castle connoisseurs and dungeon lords can take action into their own hands.
Sign up to become a member and access plumbastic features
Sign up in the portal get access to:
PlumbBot: Your quirky, AI-powered plumber-pal that helps you defeat those dastardly clogs!
PlumbGuiden: Dive into the bubbling forum of plumbing wisdom. Share a tip, snag a trick, or simply chat about all things pipe-related!
PlumbPowerUp & PlumbCertify: Turn pipe dreams into reality! Level up your plumbing skills and flush your way to side-hustle success.
PlumbQuest: When bots, guides, and power-ups can’t cut the clog, summon a PlumbQuest! Our certified plumbers to the rescue.
PlumbBot- chatbot and beoynd!
To have low OPEX and still provide accurate and helpful advice to our upcoming plumbers, we created PlumbBot. With our custom plumbing domain knowledge, we grounded the Copilot to only reply in the domain we are confident in – No medical advice lawsuits on us! More importantly, it provides step-by step instructions to resolve any plumbing issues asked by the user, in a natural Itallian, fiesty-style. More details for the instructions are provided through the references. To protect our IP, only authenticated members are allowed to use PlumbBot. It is also able to remember past chats in the case you loose connection or have to double check later on that you did every recommended step, in the right order!
However, not every plumber may solve every issue – a rupturing sewage pipe might need some more expertise. Luckily PlumbBot can redirect the member directly to our PlumbQuest page for requiring additional help.
Unlock the secrets of the pipes with PlumberPowerUp, our portal’s out-of-the-box gamified adventure! Dive into three thrilling levels – each a gateway to your very own plumber certification.
Conquer Level 1 to snag the PL-200
Triumph in Level 2 for the PL-400
Master Level 3 to claim the coveted PL-600.
But the fun doesn’t stop there! Armed with your certification, not only can you tackle your own pipe puzzles, but you’re also primed for a side hustle in solving PlumbQuests for others and generate some side-hustle coins.
PlumberPowerUp isn’t just a game – it’s your ticket to becoming a pipe-wrangling, leak-fixing, quest-conquering hero of the plumbing world!
With each victorious level, you’re are awarded with an AI-generated, uniquely-crafted diploma – a token of your newfound plumbing prowess!
PlumbGuiden
Step into our lively forum, KvinnePlumberguiden! It’s a hub of handy exchanges between members and certified plumbers. From leaky faucets to the enigma of U-bends, no pipe problem is too big or small. Grab your virtual wrench, join in, and let’s unclog the world of plumbing together!
PlumbQuest
When your DIY plumbing turns into a ‘WHY did I try this?’ moment, it’s time to summon a certified plumber with a PlumbQuest!
Or
When your electricity bills and interest rates start playing leapfrog, it’s your cue to dive into a PlumbQuest and earn some cash to keep them in check!
Skill-based routing
When creating PlumbQuest our super killer AI detector rates the severity and assigns the case to a plumber with the needed expertise. High severity will of course need the expertise of PL-600. Take a look in the following blog post to see more details: Get a Personal plumber, all fully automated with AI
In addition, because all plumbers are most likely Italian, we also make an Italian summary of the case using AI.
SMBPlumbing – the ultimate admin center!
A model-driven app so user-friendly, it’s like your admin center got a ‘For Dummies’ guide! Real data, nifty info, and a clear view of your organization’s game of hide-and-seek
Categories:
Killer AI:
PlumbBot: Custom, grounded domain export ChatBot safely governed and highly accurate plumbing solutions for a large variety of plumbing issues. It is helpful for both unskilled plumbers, as well as more experienced, certified plumbers. Moreover, it gives you the warmth (and feistiness) of our beloved CEO and CTO, Mario and Luigi
Language Mastery: Catering to our diverse members, PlumbBot seamlessly translates between English and Italian, ensuring clarity in plumbing lingo.
Intelligent Matchmaking: To properly address the criticality of the PlumbQuest, we use Generative AI through AI Builder to automatically infer the serverity degree. It then automates pairing with a suitably certified plumber, guaranteeing top-notch service and customer satisfaction.
Diploma Authenticity: Each certification diploma, uniquely generated and impossible to duplicate, is a symbol of our AI’s creative prowess. This feature underlines our pursuit of excellence in the Killer AI category, offering not just utility but also unmatched exclusivity.
Pandoras Box – Out of the box fun:
Mamma mia – Italian plumber: Everything is more fun, when interacting with an fiesty italians. This includes our PlumbBot, which gives authentic Mario-like phrases, while maintaining the profesionality. And overall in our solution Over all in our solution, is inspired by Plumbing terminology and
PlumberGuiden – A humorous, but important area for members to discuss all things Plumbing, with some topics suspiciously metaphoric-like to Kvinneguiden
Certification through Gamification: Our incredible Canvas app, scroller-platform Game allows for an enjoyable learning experience of plumbing tasks, while focusing on testing important plumbing skills to receive their PL(umbing) certifications. Exams are never fun, but this game is. With three different certifications and levels, including boss fighting, this is an amazing feat.
Diplomas: The uniquely designed certificate per user makes them stand out in the community. You never know what to expect!
Excellent user experience:
Cohesive Look – Our back-office and Customer portal has a cohesive look, with our colour scheme, page structure, font and illustration style
Best practice Customer Acquistion: Our landing page provides easy overview of the services SMBPLumbing offers, with intriguing call-to-actions and simple sign-up pages with call-to-actions and natural sign-up flow
Chat-based redirection: When the user requires more advanced expertise for the plumbing problem at hand, PlumbBot can redirect it to the PlumbQuest-page to reduce the effort of reaching out the our experts
Automatic PlumbQuest-enriching: Users may not know the severity or complexity of their PlumbQuest, so our AI-based automatic enriching providing severity and matchmaking, alleviates the burden of finding an appropriately priced plumber and complexity estimation.
Subscription model: For any access to our resources and services, a subscription is needed. This creates a steady revenue stream for our poor and tired Chief executives whom have been working hard around the world in so many castles.
Plumbing AI Assistant: Instead of relying on person-by-person expert knowledge which has high OPEX and does not scale, we leverage domain knowledge with GenAI to provide self-service tips and solutions to all of our members!
Certificates
Revenue sharing: With the community driven model and automatic matchmaking, the networking effect drastically increases our growth potential and adds continuous value to our platform the more members we have. This makes it cost-effective for the clients, while enabling up-skilled, highly reviewed plumbers to receive higher margin PlumbQuests, without the customer acquisition cost associated with a self-employet plumber company. Our plattform fee also improves our cashflow, growing with the community
What is it good that you can have improved customer communication with chatbots and forums, if the plumbers can’t get notified in realtime of relevant cases? Moreover, Mario and Luigi as CEO and CTO respectively want real-time data for improving decision support (e.g. plumber allocation) and PlumbQuest trends for further analysis.
Dataverse Webhook on Incident reports
To extract real time data, we created a Web hook using the plugin tool box for Dataverse, which calls our Azure Function whenever a new PlumbQuest is made.
XRMToolbox to add a Web hook to Dataverse for real time PlumbQuest analysis
To ensure safe access, function level authentication is applied, where the toolbox allows for HTTP Query parameters, safely accessing our Function which uses a traditional HTTP-trigger:
However – Here is the hacky part. The Web hook payload is too large, which makes the traditional JSON-payload corrupted with highly dynamic lengths and content of each PlumbQuest. Therefore we had to do some custom string manipulation to extract the values of most business and de-corrupt the JSON and preparing it for analysis – Almost a Complete ETL-pipeline (*cough*)!
But to access this real-time data in an Analytics environment – Fabric is the way to go (as by Microsoft huge Hype-wave). We created a Custom app Source for an Event Stream in Fabric with an EventHub output binding, which then can map to many different destinations, including a Lakehouse for historisation and trend analysis, as well as Data Factory Reflexes for reactive actions in real-time.
With Data Activator’s Reflexes directly on the stream, one can e.g. trigger additional flows for highly acute PlumbQuest from members in distress, or highlight plumbers who did not provide proper service according to the PlumbQuest review.
Our Fabric Event Stream with the Custom app as Source and the Lakehouse for historisation and down-the-line processing and analysis
In addition, we set up a Dataverse Shortcut (Link) to Fabric, allowing for direct access to Dataverse without ETL or ingestion, providing ease of access and down-the-line deeper analysis on key business metrics, trends and community engagement.
Our PlumbQuests in Fabric Lakehouse using a Dataverse Connection for e.g. a more complete 365 customer view using Fabric items
Reproducible deployment
Although we are nasty hackers, we are reproducible hackers. As these were the only Azure resources used (directly), we deployed them using bicep and the Azure CLI. Sensitive variables are marked as secure and not included in the scripts, but parameterised.
The main bicep deployment definitions for our Azure Function app and related resources, the resource group naturally had a separate BICEP definition.
So if you want to do it hacky, at least make it traceable.