I did a thing!

Background

For years, I’ve had this itch:

What if I could build my own app experience on top of Dynamics 365 — something cleaner, faster, and more modern than a Model-Driven App?

Model-Driven Apps gave us structure.
Canvas Apps gave us freedom.
Power Pages brought external users into the mix.

But the truth?
Every time I looked over the fence at “actual code”, I would freeze and not have a single clue where to start….

This summer I opened VS Code, enabled GitHub Copilot, paired it with Claude, and suddenly… the digital barrier that had been there my whole life was gone🤯.
I didn’t magically become a full-stack dev — but AI gave me just enough superpowers to build what I used to only imagine.

So the next months I spent learning how to become a better prompter as this seems to be the key element to a good/bad AI Agent developer.

I wanted to experience that transition from the driver’s seat.

What

Let’s get this out of the way: I did everything wrong first.

I over-engineered front-end tech.
Played with services I had no business touching.
Tried Azure B2C.
Then B2B.
Failed authentication like a champion😆😆

Eventually, humility kicked in and I pivoted toward something more practical and more community friendly.

Netlify for hosting the frontend
Netlify Functions as my API + Auth proxy
React, because Claude told me to
Dataverse as my backend
GitHub + Copilot + Claude as my “coding superbrain”
Clerk.dev to handle identity

After weeks and weeks of late nights and swearing at the AI that seemed to never really understand what I actually was hoping to solve.. It finally worked👏👏.

  • A portal.
  • Not over-engineered.
  • Just a clean, simple app that talks to Dynamics and feels… modern.

https://github.com/thomassandsor/CommunityPortal <- the project

Is it enterprise-ready?
🛑No🛑

Is it secure?
I sure hope so

Did it need to exist?
Probably not😆😆

But I made it.
And honestly, I love it💖💖💖💖

WHY?

I built this because I wanted to learn, not because the world needed “Thomas Portal v1”.

If I wanted speed (time to market), I would have stayed in Power Pages.
If I wanted stability, I would have stayed in Model-Driven land.
But I wanted to understand the future, and had to become a coder….. A coder with extreme backing of AI 😉

And here’s the real point:

The future of low-code isn’t “no code.”
It’s augmented code.
Makers will write code, guided by AI and that’s just something you need to get to terms with.

Microsoft is already opening up the AI generated code for editing, so it’s just a matter of time before the hybrid experience of real dev with AI dev working in “harmony”.
When these 2 worlds align, the difference between a maker and a developer becomes simply: curiosity and willingness to try.

Curiosity is the only qualification I had when I started this.

So now I’m sharing my journey not to show off, but to give others a trailhead.

If you’ve ever thought,
“Could I build something real outside of Dynamics/Power Platform”?
The answer is YES.

All you need is VS Code, some stubbornness, and an AI that believes in you more than your JavaScript error messages do.

Going forward

And now, with Microsoft’s latest announcement where Copilot can build apps and workflows from natural language prompts it’s even clearer:

Low-code isn’t dying.
It’s evolving into augmented coding

Low Code Vibezzz: Can Power Platform Catch the Vibe Coding Wave?

What If Microsoft Could Start Over with Power Platform?🤔

The world didn’t change overnight when AI arrived at our doorstep—it’s been creeping in for years. Quietly embedding itself into release notes, keynote demos, and C-level posts about copilots. But something has shifted recently. It’s not just about AI anymore. It’s about how we build.

Enter Firebase Studio—Google’s latest tool that reimagines app development in an AI-first world. You type a prompt. You get a working app. No need to understand frontend or backend development to get going.

To be honest, it’s not no-code or pro-code. It’s something new:
Vibe coding—live-coding an app while vibing with an AI.

But it raises a big questions:

If Microsoft could rebuild Power Platform today from scratch—would they? Should they?


🧱 Power Platform: An amazing Low-Code product from Microsoft

Let’s be clear—Power Platform is a success. It has matured into a serious contender in enterprise low-code. It integrates deeply into Microsoft 365, Azure, and Dynamics. It empowers organizations to build apps fast, with governance and security built-in. That’s huge💪🏼

But like every long-running platform, it carries legacy and complexity that customers unfortunately need to understand.

  • Canvas vs. model-driven.
  • Custom pages vs. screens.
  • ALM pipelines that almost work well, but are still too complex for makers.
  • Two devs working on the same app? Still tricky.

Power Platform is constantly evolving, but having a hard time reinventing. Features are added, yes. Power FX, Copilot, co-authoring (kind of). But it’s like adding smart tech to a legacy car. You still feel the steering pull.


🤖 Vibe Coding: The New Developer Mindset

Firebase Studio isn’t just impressive because of what it can do—it’s impressive because of how it makes you feel while building. You’re not clicking through menus or configuring controls—you’re coding through conversation. It understands intent, backend structure, and front-end flow. It speaks your developer language.

That’s vibe coding.

And it changes the entire mental model of app development. It doesn’t feel like low-code—it feels like the fastest way to get real code out of your head and into a product.

Microsoft’s Copilot in Power Apps made an early push in this direction, but the experience felt more like autocomplete than a creative partner. There’s still a gap between vision and execution—and that’s what vibe coding is beginning to fill.


🍎 Are We Even Comparing the Same Fruit?

This is where we need to slow down. Comparing Power Platform to Firebase isn’t really apples-to-apples.

Power Platform is primarily about apps within organizations. It’s designed for internal users—business analysts, operations teams, HR, finance etc etc. The goal is to automate, digitize, and streamline internal processes, not launch a consumer product.

Firebase, on the other hand, is focused on external-facing apps. Think: public apps, customer portals, mobile-first products. It’s optimized for scale, authentication, telemetry, and UX polish.

So when people ask which platform is “better,” maybe we’re asking the wrong question. These tools are solving different problems for different audiences.

But here’s the thing: what if Power Platform could serve both?


🌍 Should Microsoft Blur the Lines?

Right now, if you want to build an external-facing app with Power Platform, your path usually leads to Power Pages—a separate product, with its own learning curve and licensing model. But what if Power Apps could evolve to let you publish customer-facing apps without leaving the platform?

💡Could Power Platform adopt more external scalability features?
💡Could it support richer public UX design options natively?
💡Could it blur the line between internal tool and external product?

If Microsoft wants to meet the expectations of the next generation of developers—raised on vibe coding, AI chat loops, and fast product delivery—these are questions worth asking.


💸 Pricing Models: A Mindset in Disguise

Firebase’s pricing is based on usage—you pay for authentication, reads, writes, bandwidth. It feels like you’re scaling your cost with your success.

Microsoft’s Power Platform pricing has historically been harder to navigate: per user, per app, per plan, per… something. Recent changes have simplified this somewhat, especially with the Developer Plan and Pay-As-You-Go licensing. But many organizations still feel that cost becomes a question before innovation can even begin.

This difference isn’t just a billing structure—it’s a reflection of platform philosophy. Microsoft monetizes the potential to build. Google monetizes the outcome of building.


💡 Power Platform: Building the Bridge Between Low-Code and Pro-Code

So here’s where we land.

Power Platform has done incredible work empowering business users to build. But the future of app development won’t be about choosing between low-code and pro-code—it’ll be about combining them, in a seamless, AI-driven workflow.

That’s what vibe coding hints at.

If Microsoft can continue to build that bridge—bringing Copilot closer to being a real dev partner, simplifying collaboration, supporting external users natively, and making the pro-code experience feel native, not bolted on—then Power Platform won’t just keep up… It will lead.

Because the real challenge ahead isn’t just catching up to new tools.
It’s embracing a new way of thinking about what an app is—and who it’s for.

Power Platform Low-Code Plugins: A Step Forward or Sideways?

Microsoft’s vision for the Power Platform has always been about enablement. “Low-code, no-code” has enabled many makers to build business applications without writing traditional code. It’s an attractive idea—why rely on scarce pro-dev resources when we can empower citizen developers to build what they need?

But then, there’s the reality. And reality often doesn’t align with the marketing slide decks.

The Promise of Low-Code Plugins

With the introduction of Power Platform Low-Code Plugins, Microsoft is making a push to bring more low-code automation into Dataverse without requiring full-scale C# development. This is positioned as a way for makers and consultants to extend Dataverse business logic without writing actual “code.” Instead, Power FX—the formula language familiar from Canvas Apps—is now the tool of choice for defining business logic inside Dataverse.

Sounds great in theory. But in practice? Well…

Power FX: The Wrong Tool for the Wrong Job

Power FX was originally designed as an Excel-like expression language for Canvas Apps. It made sense in that context—business users working with familiar formula structures to manipulate data and UI elements. But introducing Power FX into the Dataverse backend, for things like plugins and actions and custom API’s? That’s where I’m starting to become more skeptical.

The biggest challenge? Documentation and consistency.

Power FX has been evolving rapidly, and Microsoft’s documentation often lags behind its features. Unlike C#, which has decades of well-documented patterns, Power FX still feels like a moving target. That’s a serious problem when you’re expecting makers to build business-critical logic with it.

Another issue? Limited debugging and developer tools. If you’ve worked with C# plugins in Dataverse, you know there are well-established debugging workflows, ALM processes, and mature developer tooling. Power FX inside low-code plugins lacks much of this maturity, leaving makers and consultants with trial-and-error debugging experiences that feel more like “guess-and-check” than actual software development.

The Rise of the “Semi-Devs”

A common argument for low-code plugins is that they enable a new breed of “semi-devs”—makers who aren’t full-blown pro developers but need more control than what business rules offer. But instead of making things easier, Power FX in low-code plugins risks creating a knowledge gap that is harder to bridge:

  • Too complex for true no-coders (who are used to simple workflows and Power Automate)
  • Too limited for pro-devs (who would rather use C# plugins and proper ALM practices)

The result could be a language that neither no-coders nor pro-devs fully embrace.

Is This Really the Right Evolution?

Low-code development has its place. But if the goal is to reduce friction in extending Dataverse, introducing Power FX for backend logic might not be the answer. Instead of making things easier, it risks:

  • Creating a fragmented development experience (Canvas Apps vs. Model-driven Apps vs. Power Automate all having different functions available)
  • Complicating long-term maintainability (A language still in its early stages that could suddenly deprecate functions needed to run)
  • Forcing makers to learn yet another Microsoft language that doesn’t have the same depth of community support as C# or JavaScript

Conclusion: Proceed with Caution

The dream of empowering non-developers to build business applications is a good one. But Power FX for low-code plugins feels like a compromise that benefits neither no-coders nor pro-devs. It’s yet another Microsoft experiment in bridging the gap between citizen developers and traditional software engineering—and I am going to wait a moment before jumping on any train.

For now, the best approach? For me personally, I am going to stick to the pro-code approach. My reason: knowing that what I do will most likely work without interruption for the next years. Sometimes there is no obvious right or wrong, but you have to commit to your decision knowing the potential consequences.

Vote for Cange first result! ✅🏆

A while back I started the YouTube series Vote For Change where I highlighted different Ideas on Microsoft’s change portal and pushed for more votes.

The idea was to create more traction around the subjects so that we could all push for changes that the people wanted, and not just Microsoft’s top priority. With the low number of votes on the Dynamics side, it was important to get the number higher so that Microsoft would take us more seriously.

The results so far are that 2 of the 3 topics that have been covered have been solved!!

https://crmkeeper.com/ideas/

Country Address Lines FIXED✅

It just goes to prove that Microsoft actually does listen from time to time! 😀Look at how beautiful it turned out 💯

Please keep VOTING for good ideas!

Microsoft: Trying to Out-Tech Too Early or Right on Time?

In the ever-evolving landscape of customer service, Microsoft is trying to integrate cutting-edge technology into their Contact Center solution. The latest push? Leveraging AI and IVR to create a seamless, efficient customer experience. However, recent findings by Gartner raise a critical question: Are they innovating too quickly, or is this the perfect moment to bring AI into the spotlight?

The AI and IVR Vision

Microsoft’s vision for the Contact Center of the future is a robust blend of AI-driven virtual agents and advanced Interactive Voice Response (IVR) systems. These tools are designed to automate routine inquiries, reduce call times, and free up human agents to handle more complex issues. By implementing AI, Microsoft aims to revolutionize customer interactions, making them more personalized and efficient.

At the core of this vision is the belief that AI and IVR can enhance the customer experience by providing quick, accurate responses to frequently asked questions, guiding users through complex processes, and even predicting customer needs based on historical data.

What the Customers are Saying

According to a Gartner survey, a significant 64% of customers expressed a preference for companies to refrain from using AI in customer service. This statistic highlights a potential disconnect between the technological advancements companies are implementing and the actual desires of their customer base.

Why this reluctance? Many customers feel that AI lacks the empathy and understanding of a human agent. There’s a perception that bots are rigid, unable to navigate complex emotional nuances or understand the full context of a customer’s issue. Additionally, the frustration of dealing with a bot that doesn’t grasp specific queries or misunderstands the customer’s intent is real and tangible.

The Good Old DTMF: A Preference for Simplicity

The DTMF (Dual-Tone Multi-Frequency) system, with its simple, straightforward keypad-based navigation, still holds a special place in the hearts of many customers. The ability to press a number and reach the desired department or service without having to converse with a bot or navigate complex IVR menus is appealing. This preference meets a broader customer desire for control and predictability in their interactions.

DTMF represents a known quantity – it’s familiar, it’s simple, and it works. In an age where technology can often feel overwhelming or intrusive, the simplicity of DTMF can be a comforting presence.

Striking the Right Balance

So, is Microsoft trying to out-tech too early, or are they right on time? The answer might lie in finding the sweet spot between technological innovation and customer comfort.

While AI and IVR have the potential to transform the contact center experience, it’s crucial to implement these technologies in a way that respects customer preferences and concerns. This might mean offering a hybrid approach, where customers can choose between speaking to a human agent, interacting with a bot, or using DTMF. By providing options, companies can cater to the varying needs and preferences of their customer base.

Conclusion

As Microsoft continues to push the boundaries of what’s possible in customer service technology, it’s essential to keep the customer at the heart of every decision. Innovation should not come at the expense of customer satisfaction. By listening to customer feedback and adapting accordingly, companies can ensure they are not just on the cutting edge of technology, but also aligned with the desires of their customers.

Microsoft’s push into AI and IVR may well be a step in the right direction – but only if it’s accompanied by a commitment to flexibility and customer-centricity. In the end, the best technology is the one that serves the customer most effectively.

Ribbon Editor Updates: Hide/Show Buttons and Customize NEW Button

Since my last post Advanced Settings Facelift was about old things getting a facelift, I thought I would be ok to continue on another similar post. This time it’s about the good old ribbon.

It’s no news that the ribbon is possible to edit in the make.powerapps view, but we all know that the functionality there has been so poor that you mostly end up customizing the buttons in the good old Ribbon Workbench from Scott Durow. Not that there is anything wrong with the tool, but Scott works for Microsoft ATM, and maintaining an amazing tool like that is not future thinking.

A few days ago, I stumbled upon a post on Twitter/X from Robin that mentioned new updates to the Command Bar (Ribbon Editor in Make). The video might seem a bit simple, but we have to look behind the simplicity to see the complexity 😃

Whats new?

We are now able to Hide/Show (without formula for now) the following buttons

The hide is currently only located on the left side menu

You are probably going to ask yourself WHY exactly these buttons and not all? Well, there seems to be a lot of technical things behind the scenes where a button isn’t just a button. A CRM button isn’t even the same as a Dataverse button in the backend according to sources. We could all complain about this, since RibbonWorkbench doesn’t seem to even care about any of this, but let’s focus on the positive parts here. WE ARE ONE STEP CLOSER 🙂

Next update was the possibility to modify the actually NEW button

This is the first time we have been able to customize an OOTB button with PowerFX or JavaScript. Again, you may ask why only the NEW button. I’m asking the same thing, but also accepting that it’s a step in the right direction 😂

This does bring the possibility to add cool stuff to the NEW button when in Main Grid. Have a look at the Twitter video and you might see what is going on. The button calls a JavaScript that in turn opens a Custom Page. The record itself isn’t actually ever opened. Yes, we could do this with RibbonWorkbench, but again… One step closer 😉

Why is it important?

Just to reiterate what I wrote earlier. Scott now works at Microsoft, and leaving the Ribbon Workbench unattended for the next years is not a viable option! Microsoft has to realize that the Command Bar has to get better fast. A LOT BETTER. This update might seem like a small/insignificant change, but this is jumping a few hurdles that will get us closer to the end goal. 🏁

In the future, we can hopefully retire the Ribbon Workbench and be thankful that Scott got us through a lot of hard situations😃. Just imagine the weight Scott has had on his shoulders since the release of the first Ribbon Workbench! Everyone is reliant on his work, but we all probably take it for granted every time we use it. Just think of how many hours it has saved you, and it’s designed and maintained by a single person receiving no money for it!

Model Driven App Advanced Settings – New look

We all knew it was a matter of time before the old UI would be replaced, and soon we are one major step closer to being rid of everything old UI.👏🏼👍🏼

The old Advanced Settings that so many people are used to navigating is about to get a new look, and this time as a separate APP. APP you say… Well, yes.. Just like the Sales HUB configuration, lots of parameters are not typical records in a table, and therefore it needs to represent configuration parameters in a different visual experience.

This is obviously still in preview and only available via the USA preview environment, but it should be arriving soon. Of course, there will be lots of initial bugs with this, but give it some time before it hits GA. Be constructive in the criticism and you might actually see the changes implemented 💡👍🏼

Why are some skeptical to the change?

There are 2 obvious reasons why some are still skeptical about the loss of classical UI.

  1. Advanced Find is soon GONE.
  2. Classical Solution config will also be GONE

Advanced Find has been given a new UI through the global search feature, BUT this search doesn’t include all tables. Only includes the tables that have been included in the application. This is a huge limitation for those who actively use Advanced Find a lot to really understand the underlying data.

Classic Solution Configuration is still the preferred way to navigate within a solution for many. Mostly because the navigation itself is a lot faster between entities (once loaded), and because it’s really well known for most OG’s 😉. Another point to be made is that not all configurations are possible YET in the MAKE portal (some components), but I am sure they will be rushed along once we finally land on 1 common config platform for all consultants.

Thank you to https://www.linkedin.com/in/allandecastro/ for notifying me about this preview feature.

Security Roles – The 3 Phases

Security Roles the least fun part about Power Platform – Dataverse / Dynamics 365. I would rather use hours finding the right ICON for every single custom entity😂. Yet security roles happen to be the pilar of why our platform is so much more powerful than other technical platforms.

I find that my approach to security roles almost always ends up the same way when I deliver new solutions. Therefore I thought I would share a bit of what goes through my mind in the different stages:)

1. Creating the role

There are many blogs about creating roles, and recently we even received a new modern way of modifying security roles. I’m not going to cover the hows, but you can pick up a few tips from the following blogs:

Blogs about the new ways of creating roles:
https://learn.microsoft.com/en-us/power-platform/admin/security-roles-privileges
https://malindonosomartnes.com/2023/06/29/new-security-roles-admin/
https://nishantrana.me/2023/05/01/manage-security-roles-using-the-new-modern-ui-preview-power-platform-admin-center/

What I do want to share is my personal opinion on where to start. As you know I mostly work with Dynamics 365 and not pure Power Platform environments. If I am delivering a Sales solution I almost always start off by copying the Salesperson’s security role.

Don’t ever start a security role from scratch. It’s simply not worth the time.

So for Dynamics sales I would typically just copy the Salesperson as a start

And for Power Platform I might start with Basic User as a start.

A typical error I do is hoping that I can end up with a single security role to make things simple. Pushing all users into the same role because why not. I am one for more access to users, and depend on teaching people to handle data with respect. Within the first few weeks, you soon realize that you probably need an admin role for administrative tasks.

PS: One thing I always do is of course to limit any delete actions for ALL users the first few weeks so that they don’t blame the system for GHOST deleting items. Yes, that has happened! 🤷‍♂️

2. Assigning the role

After hours of banging your head on the wall, trying to figure out what security privileges you are missing for the application to work as expected, you arrive at the next task of assigning the security roles to the users.

The next error that I have done more than once is thinking that we can manage the security roles directly on the user. To begin with I use a tool like XrmToolBox to deploy roles to multiple users at the same time, but a few weeks/months down the line people hired/fired/re-org having to make these changes often is going to take way too much time. Having to bill for these changes is also going to be frowned upon because it’s “just a simple task”.

Traditionally this has been very straightforward for the sales and customer service users, but lately, this is becoming more and more of a challenge. With the release of new functions, you will soon understand that keeping up with security roles is almost impossible. With new solutions from Microsoft being installed automatically, you might also see a few security roles to follow along. Examples of this would be the Forecasting functionality to sales.

Normally one would think “Let’s just add these to the main security role for all users” BUT there are times when the actual security role ID/Name is the one opening up the functionality.

The Dynamics 365 app for Outlook User is one of these apps I believe. In order to actually qualify for the app deployment, you need this security role.

So my first initial thought that one user could have “Salesperson” as a single role with all of the functionality is now turning into a nightmare handling pr user. I now have to manage lots and lots of users/changes etc while trying to maintain the correct roles given.
The image below is just an example

3. Structuring the security roles with teams

This leads us to the final phase of security roles for me, where I realize that I should have done things right from the beginning. Using the extra time early on so that I save time when the project is live😤

Just like marketing people are oddly obsessed with personas, we have to think about what types of users do we expect to see in Dynamics / Power Platform. In a simple solution, you could easily have the following personas.

  1. Sales User
  2. Sales Admin
  3. Marketing user

Dynamics users are well aware of teams being able to connect security roles, but Power Platform users are not always aware of this.

Create a team, add users, and then add the security roles. This is a much simpler way of managing changes in security roles because changes only need to happen in 1 place.

Hold up

The problem with this solution is that Dynamics / Power Platform consultant or someone familiar with Dynamics / Power Platform needs to make these changes. In a worst-case scenario, a company would have IT create a user and assign a license. THEN they would have to contact other consultants to add security roles or add someone to the team for correct access. This method is flawed and will at some time become a problem. Microsoft has fortunately given us a great solution for this.

Solution✅ – AAD Security Groups / Entra Identity Security Group

I am not going to cover how to create a security group in AD and later on, add it to Dynamics / Dataverse. Have a look at the following posts for these tasks:

https://learn.microsoft.com/en-us/power-platform/admin/manage-group-teams#create-a-group-team
https://forwardforever.com/how-groups-teams-work-in-power-apps-dataverse/

What I think is so important about the Security Group is that it removes the burden of access from the Dynamics / Power Platform consultant, and puts it in the hands of IT managing general access to all systems in AD. This just makes so much more sense, because these people normally do the on/off-boarding for all technical aspects. All you have to worry about is that security roles are given to the correct team.

Within Dynamics / Dataverse there is no difference in how to assign security roles BUT there is a major difference in having the members auto-populated based on AD security groups.

Moral of the story

Use Security Groups unless you have a very good reason not to 😘

Dynamics 365 – Adding products issue

This might be the dumbest blog in a while, but I am adding it in case others have problems with the same issue.

Recently I needed to add new products to the product table of Dynamics, and the buttons for adding the products/families were gone.

I of course had to look at the documentation in case there was something obvious I was missing. The documentation only wanted to ensure that I had a license + security role.

All of this was checking out on my side as I had a license and I was an administrator. Still, I was desperate trying to understand such a stupid issue that I made sure I had enough roles:

Eventually, I got some help from friends, and a huge thank you to Vivian Voss for pointing me in the right direction. First I was told to check the “obvious”.

Are you able to configure products via the old UI?

Vivian Voss

Well, turns out I was.

Solution?

Go to the Default Solution of configuration and make sure that “read only” was not on for the product table in the new UI😂😂🤷‍♂️🤷‍♀️🤷

The only thing that I can think of is an update from Microsoft changing this value for some odd reason. The fact that it is read-only in the Unified Client makes no sense, but hey. Not the first time something like that has happened.. hehe.

Just make sure this is OFF, Save changes, and then publish the table. You should be able to configure products again.

Custom Page – Opportunity Close Solution Download

Initially, I was just going to explore some possibilities with Custom Pages, but decided to make a solution out of it instead. This way you can just download the solution and do the required modifications for your project (GIPHY API key), and you are good to go😁

I am really excited to hear your feedback after seeing/trying this out, and hopefully, I will be able to make it a lot better in next revisions of the Custom Page!

Go to my GitHub to get a hold of the solution. It’s a pretty “thin” solution that should be easy to configure and easy to delete if you no longer need it.

💾 DOWNLOAD 💾

I have also included a video displaying how you install and use the solution

Installation and setup

Because of ribbon changes, I was forced to create a managed solution for this. The only way it wouldn’t overwrite the current opportunity ribbon.

If you want to play around with the solution, download the unmanaged. Just make sure you don’t have any other ribbon customizations on Opportunity. If you do back it up first!!

For everyone else, you have to download the managed solution to be on the safe side.

On my Gihub page I have written what components get installed, so you can easily remove it all at a later point in time.