Slytherins stick together. In light or dark times the spirit within SlytherIN is high. And as the project comes together it only get’s higher. The sky is the limit.
Around the table or casting dark curses on our competitors we do it all with a smile.
When a pro-code developer creates magical code, we low-code developers need to assist where we can to speed up the work. We have created a good solution based on Azure AI Services, where we send data from Dataverse via Power Automate to a Python Flask app that translates everything we send into a message delivered to our Howler. Given the time we had, this would not have been possible.
The physical Howler integration is approaching, and the Arduino is working hard. It’s put together by paper, tape and glue. And much love! Here we have an example of what we have in store:
An example of translation and delivery of message follows: “I don’t like you anymore. You have proven to be untrustful!” -> “Dear Sirius,
Oh, how the tides have turned! I find myself in a whirlwind of emotions, and I must confess, I don’t like you anymore. Your betrayal stings like a Cruciatus curse, and it’s clear you’ve proven to be utterly untrustworthy!
How could you, of all people, turn your back on family? It’s as if you’ve taken a page from the Marauder’s playbook, but this time, it’s not a prank—it’s a dagger to the heart!
Desperation claws at me, and I can’t help but feel the madness creeping in, like a Dementor’s chill. You’ve left me no choice but to sever the ties that bind us.
Goodbye, Sirius. May you find your way back to the light, though I fear it may be too late for you.
Our camp is full of all that a Slytherin needs: evil wands, snakes, emeralds, and cauldron snacks! Did I mention the magical bath tub also 3D printed by our very own Herman? All set up for a perfect day of coding.
What’s better than automatic deploy pipelines? Not that much really. When merging to main, our React App automatically deploys to Azure Static Web Apps. Pretty neat! All secrets are of course stored in Github Secrets.
Our github workflow:
name: Azure Static Web Apps CI/CD
on:
push:
branches:
- main
pull_request:
types: [opened, synchronize, reopened, closed]
branches:
- main
jobs:
build_and_deploy_job:
if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed')
runs-on: ubuntu-latest
name: Build and Deploy Job
steps:
- uses: actions/checkout@v3
with:
submodules: true
lfs: false
- name: Set up API Key
run: echo "API_KEY=${{ secrets.DATAVERSE_API_KEY }}" >> $GITHUB_ENV
- name: Build And Deploy
id: builddeploy
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_THANKFUL_HILL_0CC449203 }}
repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments)
action: "upload"
###### Repository/Build Configurations - These values can be configured to match your app requirements. ######
# For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig
app_location: "/" # App source code path
api_location: "" # Api source code path - optional
output_location: "build" # Built app content directory - optional
dataverse_api_key: ${{ secrets.DATAVERSE_API_KEY }}
###### End of Repository/Build Configurations ######
close_pull_request_job:
if: github.event_name == 'pull_request' && github.event.action == 'closed'
runs-on: ubuntu-latest
name: Close Pull Request Job
steps:
- name: Close Pull Request
id: closepullrequest
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_THANKFUL_HILL_0CC449203 }}
action: "close"
All great things start with an idea, then a sketch. More often than not a terrible one. And so did our design. A quick, simple and dirty sketch made in 30 seconds.
Now the purpose of the design was clear from second 1. It had to contain 4 main functions:
Let the user pick a recipient (or victim)
Set the desired mood
Write the message
And of course send
How much things change and yet stay the same
The interface is clean simple. The user knows what they want to do and they do it easily and fun. The colors are calm, subdued and beige. Inspired by parchment and well worn paper. With gold for the interactive elements (button and slider) drawing parallels to the gold seal from the movie howler.
The design is made in figma. Every element, color and illustration ready for easy development
And of course we had to include a little animation. For the extra panache
Sometimes, you must face that conversation. Whether it’s breaking up, announcing a death, or worst of all, firing someone. Lacking the leadership to make that decision, the courage to say what needs to be said, the wisdom to say it right, or the patience to hear them out? We have the solution. SlytherIN’s Howler does the job you can’t! Say what you want in any tone you desire. Are you happy but need to send an angry message? No problem.
Very very high level architecture
Our solution consists of an interface where you can enter the recipient, message, tone, and send it off. The recipient will have the message read aloud by a letter that speaks for the sender. The message will be read in the tone specified by the sender. A termination can be delivered in a pleasant tone, even if the sender is furious. Or vice versa.
Our tools for creating the magical Howler
We integrate our solution with Microsoft Teams for easy access from the workplace. Additionally, we have a standalone web app for convenience. Naturally, it’s responsive! On the back-end, we use Dataverse for storage, Power Automate for flow, and Cognitive Services for excellent translation to the recipient. The physical letter is aided by a Raspberry Pi and Arduino for movement and sound. Nothing is left to chance. This ensures a complete experience for both the sender and the recipient. But of course, it’s best for the sender, who avoids delivering unpleasant messages in person.
Later on we will add reporting for sent messages using data from Fabric presented in Power BI