Services
Company
Blog
Contact
Open Source

Latest Updates / 2

Company and industry news, featured projects, open source code, tech tips, and more.

Resourcing to expertise: taming digital marketing chaos

Michael Argentini Avatar
Michael ArgentiniMonday, May 19, 2025

We've helped digital marketing and SEO agencies implement their strategies for years. Even when they have software development staff we've been able to augment their team and provide real value. The key takeaway is that when timelines and budgets are tight, and your development staff is booked, reduce risk and scale up quickly with a software development partner. Here are a few reasons why this makes sense.

Resourcing

It can be hard to resource digital marketing projects on short notice. And bringing in contractors can add significant risk; from lack of expertise to limited availability and single point of failure scenarios.

Using an experienced development partner is a better choice when time, quality, and/or risk aversion are paramount. You will have a self-managing team at your disposal. They will provide redundancy, coordinate with your project and account managers, and provide additional resources when needed.

Fresh perspective

Software development in a single vertical tends to restrict professional growth. And though teams tend to coalesce and work better together over time, their shared experience is likewise limited. It's like being a movie reviewer of science fiction who is then asked to review a documentary on the Renaissance.

When you periodically leverage a software development partner you add a diversity of experience across industries that helps you deliver better services to your clients. It also helps your team learn and grow.

Expertise

When it comes to providing digital marketing services, specialization is a key asset when generalization is your model. Agencies typically offer a full-service product, and as such may even have their own software developers. This means that they have to provide the expertise for two unique businesses.

Focus typically yields better quality. That's why it can be a huge benefit to engage with a software development partner, especially on your most important projects. They provide specialized services that improve the quality of your digital tactics, as well as reduce time to market. And they're typically more experienced in working with a wide range of development platforms and services.

Want to know more?

There's usually more to the story so if you have questions or comments about this post let us know!

Do you need a new software development partner for an upcoming project? We would love to work with you! From websites and mobile apps to cloud services and custom software, we can help!

Coursabi renewal: Deciphera

Michael Argentini Avatar
Michael ArgentiniTuesday, May 13, 2025
In the past three decades, tremendous progress has been made in the fight against cancer, but there is still so much more work to be done. At Deciphera, we remain steadfast in our mission to improve the lives of people living with cancer - and that passion for making a difference extends to the patient groups and communities in which we live and work. In the past three decades, tremendous progress has been made in the fight against cancer, but there is still so much more work to be done. At Deciphera, we remain steadfast in our mission to improve the lives of people living with cancer - and that passion for making a difference extends to the patient groups and communities in which we live and work.

During the COVID pandemic, Fynydd partnered with Blue Sequoyah Technologies (https://bluesequoyah.com) to build Coursabi: a cutting edge learning platform (https://coursabi.com). It's an all-in-one learning solution with features like native and SCORM course support, video conferencing, audio and video libraries, forms, reports, events, and more, all presented as a concise learning journey.

We found particular success in the pharmaceutical and healthcare space, and are proud to see these clients renewing each year as they find success in keeping their teams trained, compliant, and most of all, happy.

One of our early subscribers, Deciphera (https://deciphera.com), has been at the cutting edge of cancer research for decades. They do great work, and we're proud to say that they have renewed their Coursabi subscription for 2025!

Want to know more?

There's usually more to the story so if you have questions or comments about this post let us know!

Do you need a new software development partner for an upcoming project? We would love to work with you! From websites and mobile apps to cloud services and custom software, we can help!

Website builder service or custom website?

Michael Argentini Avatar
Michael ArgentiniFriday, May 9, 2025

There is a world full of "build your own website" services that allow just about anyone to stand up a new website in a few hours. Even organizations can leverage the simplicity offered by these services to set up an online store, community, and more. Here are a few examples of why people typically choose these services.

  • Quick setup and time to market
  • Reasonable up-front pricing
  • Design templates
  • Integrated services, like shopping carts and email
  • Managed hosting

Sounds great! But as with everything in life, there are tradeoffs.

  • Quick setup and time to market means giving up control over things like your domain name, web app design, email provider, and more
  • Reasonable up-front pricing usually means a tiered pricing model with add-on pricing for essential features like a custom domain name, additional bandwidth, and increased storage
  • Design templates mean your web app will largely look like a lot of other web apps that use the service, and may not match your vision, and custom designs can require service-specific web development
  • Integrated services also means no choice over the provider of the service, which could be missing features you need
  • Managed hosting means scaling (growing) is significantly more expensive, network bandwidth caps can apply, and true customer and data ownership are dubious

Regardless, these services can be a great way for individuals and small organizations to bootstrap their web presence, and in many cases, you can happily continue to use the service for years.

But there are also long-term lock-in issues that can be more serious, potentially impeding your growth, for example:

  • You may contractually own your data, but extracting it to migrate to another platform is usually not practical or possible at all; they don't want you to leave
  • When the service changes (features, pricing, etc.) or if the service is purchased by another entity, you usually have no choice other than rolling with it, for better or worse
  • If the service shuts down, you're going to struggle to replace everything they offered to your visitors in a relatively short period of time
  • Most successful businesses will outgrow these services anyway, so you could be missing out on long-term savings

Custom websites

If the tradeoffs are too much to swallow, fear not! You can also go with a custom web app tailored specifically to your needs and budget. It can match your vision without compromises and scaling can be managed more easily as your business or traffic grow.

So how do you get started? With a builder service you first have to find one with the price and features you need, and then create an account and dig into their control panel to start configuring your website. Whereas for a custom website the first step is to find a web development partner you can rely on for advice and technical expertise, like Fynydd. Your partner can help gather your ideas, come up with a plan, and build your web app, all within your budget and timeline. They're usually experts in both new web app projects and migrations from other platforms and services. Most importantly, they fill the knowledge gap left by the "build your own website" service.

A web development partner will choose technologies that have a proven security track record. One way we do this is by consulting the CVE database; a publicly funded global resource for tracking common vulnerabilities and exposures. For example, a CVE search quickly reveals that WordPress has historically been a security nightmare.

Your development partner will help you with a design that matches your vision, a hosting service that meets your needs and budget, a security review, a backup plan and disaster recovery strategy, and more. When the time comes to grow your platform, they can help with that too. And throughout the journey you maintain full control over your brand, your website, your data, and your customers.

Want to know more?

There's usually more to the story so if you have questions or comments about this post let us know!

Do you need a new software development partner for an upcoming project? We would love to work with you! From websites and mobile apps to cloud services and custom software, we can help!

Supercharge offshore development

Michael Argentini Avatar
Michael ArgentiniWednesday, April 30, 2025

When it comes to offshore software development teams, managing quality and risk creates value. But you also need experienced leadership and oversight for long-term success. Simply adding offshore bodies to a project rarely works, and has diminishing returns.

Here are some process tips for mitigating risk and getting the most value from an offshore team.

  • Also leverage an onshore development partner for leadership and critical systems design. They can create and direct strategy, ensure developers follow patterns, address compliance and security concerns, and perform code reviews to ensure quality. They can also write better code faster, which best suits critical systems development. This is what we do at Fynydd and it works.
  • If possible, your offshore team should mirror your operating hours. Otherwise communications, troubleshooting, and overall progress will lag. It can be beneficial to have expanded availability for handling off-hour requests, but that means the offshore team needs decision-making authority. Otherwise someone in the organization will also need to be available during those hours.
  • Try to get dedicated resources for the long term. When there are offshore staff changes, require that they fully train the replacement(s) before additional staff are brought in. It takes time! New developers, even when they are superstars, need to learn a platform's ins-and-outs before they can meaningfully contribute.
  • Be explicit about who is running the project, give them the appropriate decision-making authority, and enforce a workflow that puts them between ideas and action. Ideally this would be a lead developer from your onshore partner.
  • If the offshore team has novice developers or otherwise low-performers, make sure they are in a learning role and not expected to work on key infrastructure.
  • Perform code reviews. Bad or inefficient code should not be tolerated and is a learning experience that can make your offshore team better.
  • Rely on your lead development partner to facilitate communication. If you find it difficult to communicate with your offshore team, your lead development partner has experience in picking up the nuance, including technical jargon that's hard to understand in any language.

Avoiding the big problems

Some of the issues you'll encounter can be avoided by engaging with an onshore development partner. Here are some tips for keeping the app or service quality high and the risk low.

  • A proper architecture and coding patterns are critical to long-term success. Without a good evolving architecture and consistent coding patterns maintenance is difficult, code readability suffers, and security vulnerabilities are harder to avoid.
  • Compliance is a bear, even with experienced developers. This can range from ensuring organization brand standards, to complying with regional legal requirements (like GDPR), and avoiding copyright violations. There needs to be a focus on these concerns which yields appropriate strategies and resolutions on a consistent basis.
  • Bad code quality is a risk. It's not just about performance and user experience. Bad code could leak information or have vulnerabilities. It could allow bad actors to misuse your app or service. Worse yet, it could facilitate the abuse of your customers.
  • A focus on security is not optional. Properly securing an app or service requires a development team that not only has a security focus, but also the experience and awareness required to implement and maintain a solid security posture. The team members have to be vetted resources with no geopolitical encumbrances and a level of trust commensurate with the app or service in question. For example, bank or government clients may require background checks.
  • Maintaining intellectual capital is crucial. You invested time and money into building a knowledge base as well as an app or service. You need to ensure that the knowledge gained building your app or service will not vanish into the ether.

Want to know more?

There's usually more to the story so if you have questions or comments about this post let us know!

Do you need a new software development partner for an upcoming project? We would love to work with you! From websites and mobile apps to cloud services and custom software, we can help!

We recently converted a website into a native mobile app

Michael Argentini Avatar
Michael ArgentiniTuesday, April 22, 2025

Planning out a long-term strategy for your web project can really pay off. We were recently reminded of that when we were asked to create a mobile app (iOS and Android) for a web-based platform we designed and built several years ago. The platform is Coursabi, a learning platform that ensures growth at each milestone for everyone on your team. You can check it out at https://coursabi.com.

Desktop view of the Coursabi dashboard. Desktop view of the Coursabi dashboard.

When we created the technical strategy we knew that a mobile app was a likely roadmap item. So we chose ASP.NET Blazor as the core platform technology. It allowed us to build a web app that felt like a single page app (SPA). And it gave us several hosting models: server, WASM (WebAssembly), and hybrid mobile. The most intriguing aspect of the Blazor Hybrid model is that unlike hybrid apps of the past, there is no web server running on the mobile device. Instead, all the C# code is compiled to native .NET code, and the web view (an embedded web browser) is only used to render the user interface. So the app runs as a native mobile app!

Various mobile (phone) views. Various mobile (phone) views.

We knew that some features of the platform would have to be altered, since the mobile app has no web server. For example, Coursabi supports the SCORM format for external learning content. And due to security restrictions, they needed a host with a trusted root certificate. So moving that out of the platform and handling the routing changes were both necessary, but totally doable.

Another benefit of a mobile app version of the platform is that in many ways it also simplifies the security model, since the app is only running on the local device, whereas a hosted app needs to manage user state, among other concerns.

Tablet view is a hybrid of desktop and mobile. Tablet view is a hybrid of desktop and mobile.

If you have an ASP.NET-based web application, you can still leverage Blazor Hybrid to turn it into a mobile app. It just needs to first be migrated into a Blazor app. I'd also recommend reviewing your web app for opportunities to make it as mobile-friendly as possible. You don't want your mobile app to look or feel like a website. But those changes not only get you a great mobile app, they also improve how your app looks and feels in a mobile web browser. So you get twice the value.

Want to know more?

There's usually more to the story so if you have questions or comments about this post let us know!

Do you need a new software development partner for an upcoming project? We would love to work with you! From websites and mobile apps to cloud services and custom software, we can help!

Vibe coding is about empowerment, not replacement

Michael Argentini Avatar
Michael ArgentiniFriday, April 18, 2025
People building robots to build robots... what could go wrong? People building robots to build robots... what could go wrong?

If you're not already familiar with the term, vibe coding is a new way of coding that allows people to use AI to create software without needing to know how to program. In the best case it empowers people to be creative and build tools that help with work or play, as low- or no-code solutions have always done. In the worst case it gives the impression (or rather sets the expectation) that they can literally build anything, and that software developers are a thing of the past. As with most things in life the truth of the matter lies somewhere between these extremes.

Vibe coding can be a great way to learn programming (and just have fun). It could save you hours of research, though AI is notorious for confidently giving you the wrong answer.

In many ways vibe coding is a variation of a theme. For many years there have been services to help non-programmers create tools. Some of the more recent iterations are low- and no-code solutions using drag and drop and interactive prompts. An example of this is Zapier, which allows you to connect various services and platforms to create workflows, among other things. One way you could use it would be to create a workflow that syndicates a blog post to your social network accounts or emails subscribers. In these cases the technology, hosting platform, security, and protocols are abstracted away so users can focus on the what and not be concerned with the how.

Vibe coding differs in that it requires that you also have an understanding of the how. In the example of syndicating a blog post, you would need to have some understanding of how each connected service handles communication with third party services, how to configure access for each platform, how the app needs to be hosted, how to deploy the app, and how to ensure the app is secure. You also need to know how to set up, use, and maintain a development tool chain, though some services may generate/host projects or compile code for you.

AI is trained on code written by people in the past. The word "train" implies that it's learning how to code when in fact it's just indexing the data in a way that allows the AI to regurgitate answers derived from that information. As technology changes AI needs to ingest new code written by software developers in order to keep up.

So if your choice of using vibe coding is simply a way to learn programming (and just have fun) you should go for it!

Otherwise, below is a checklist of good reasons to use vibe coding to build something. Keep in mind that complexity and tolerance for adventure are always subjective.

  1. You're tech savvy and interested in coding
  2. Your timeline is long or there is no deadline
  3. The app is reasonably simple, like a to do list or simple expense tracker, or is a prototype
  4. The app does not need to be hosted in the cloud
  5. You don't need to use complex third party service integrations
  6. The app cannot be created using an existing software package, like Claris Filemaker, etc.
  7. Security is not a concern
  8. Reliability is not a concern
  9. Scalability is not a concern
  10. Localization is not a concern
  11. Look and feel of the app is not a concern
  12. Data backup, recovery, and code versioning are not concerns
  13. Using the latest development patterns, languages, frameworks, and APIs is not necessary

If any of the previous points are an issue, here are some good reasons for using a low-/no-code hosted solution instead.

  1. You're not very tech savvy and/or not very interested in coding
  2. The app is no more than moderately complex, like a service to syndicate blog posts, or is a prototype; again, complexity can be subjective
  3. The app can or needs to be hosted in the cloud
  4. The app needs one or more third party service integrations
  5. Feature alignment; the service offers exactly what you need
  6. The look and feel of your app can be achieved with the hosted service
  7. Pricing for the hosted service meets your budget
  8. The hosted service provides disaster recovery options
After a while you may realize that building something yourself wasn't the best choice. After a while you may realize that building something yourself wasn't the best choice.

Professional services

This is merely scratching the surface. As a professional software developer I can tell you that the devil is in the details. One example is how important security is nowadays, and how challenging it can be to maintain a proper security posture even when you know how to code. Besides, with the right software development partner you'll end up with a better result, and stay within your timeline and budget.

A professional software development partner can handle all of the gaps and requirements you may have identified in the previous lists, including:

  • Tight timeline
  • High complexity
  • Security concerns
  • Reliability concerns
  • Scalability concerns
  • Deployment, hosting, and/or third party integrations
  • Changes to support hosting or third party integration changes
  • Technology options
  • Product evolution and upgrades
  • Strategies for disaster recovery and data backup
  • Strategies for scaling the product
  • App look and feel
  • ...and so much more!

Want to know more?

There's usually more to the story so if you have questions or comments about this post let us know!

Do you need a new software development partner for an upcoming project? We would love to work with you! From websites and mobile apps to cloud services and custom software, we can help!

Project: ZOIA Healthcare marketplace

Michael Argentini Avatar
Michael ArgentiniMonday, April 14, 2025

ZOIA Healthcare is a direct-to-patient provider of specialized nutritional products dedicated to empowering and improving the lives of individuals with inherited metabolic disorders and other rare diseases. They focus on navigating the complexities of healthcare, ensuring patients who require targeted nutrition that cannot be met through a regular diet alone gain access to necessary medical and low protein foods.

Accredited by the Healthcare Quality Association on Accreditation (HQAA), they adhere to stringent standards, helping their patients experience transformative outcomes. Their portfolio is curated to foster advancements in disease management, harnessing the power of nutrition.

ZOIA Pharma partnered with Fynydd to build a new web sales and marketing platform providing patients and organizations with a streamlined shopping experience. Individuals can browse, search, and purchase nutrition products, and even get notified when products are back in stock. And organizations also have the ability to offer a formulary catering specifically to their patients.

Some of the key features of the platform include:

  • Based on ASP.NET and Umbraco CMS
  • Hosted on Amazon Web Services
  • Fynydd's bespoke Umbraco shopping platform supporting consumers and organizations with formularies
  • Integrated with Stripe for payments and purchase management
  • Responsive framework works great on mobile, tablets, and larger devices
Screenshots

Key technologies

Front-end

CSS3

HTML5

JavaScript

Sass/SCSS

Cloud back-end

Amazon Web Services

C#

Github

Microsoft .NET

Microsoft Windows

SQL Server

Stripe

Umbraco CMS

Want to know more?

There's usually more to the story so if you have questions or comments about this post let us know!

Do you need a new software development partner for an upcoming project? We would love to work with you! From websites and mobile apps to cloud services and custom software, we can help!

The Enigma Machine

Michael Argentini Avatar
Michael ArgentiniSunday, February 2, 2025

The Enigma machine is a cipher device developed and used in the early- to mid-20th century to protect commercial, diplomatic, and military communication. It was employed extensively by Nazi Germany during World War II, in all branches of the German military. The Enigma machine was considered so secure that it was used to encipher the most top-secret messages.

An original Engima Machine, circa 1945 An original Engima Machine, circa 1945

This project is a high performance Enigma Machine emulator that allows you to:

  • Explore historical configurations using the classic 26 letter alphabet (no spaces!)
  • Use for modern quantum-resistant cryptography with the full 95-character ASCII character set.

Just like the physical device, machine state is used to both encipher and decipher text with the same Encipher() method (like a text toggle). Machine state had to match on both the encipher and decipher machines. Each operator would add specific rotors in a specific order, set rotor ring positions and starting rotations, as well as set plug wire positions. This emulator provides virtual versions of all key machine components by way of a deterministic random number generator using AES in counter (CTR) mode.

The emulated components include:

  • Plug board
  • Entry wheel
  • Rotors
  • Reflector

Additionally, characters in the source string that do not exist in the cipher character set are kept as-is in the enciphered text. For example, if you encipher a string with line breaks they are maintained in-place in the enciphered text since neither the classic 26 letter character set nor the 95 character ASCII set contain line break characters.

Performance

The emulator is FAST! When using the full 95 character ASCII character set, a large 800KB text string takes about 1 second to encipher. Typical text sizes encipher in a few milliseconds.

Cipher strength

The physical machine modified with a plug board provided 150 trillion possible settings combinations for the 26 letter character set, with a 10^16 key space for a 3 rotor configuration. 4 rotors yielded a key space of 10^19, 5 rotors yielded a key space of 10^23, and so on.

So by simply using the full 95 character ASCII character set the cipher strength will be exponentially better than the original machine, even without additional rotors or other configuration, and should meet modern quantum-resistant cryptography needs.

Example 1: historical preset

It's easy to create a new virtual Enigma Machine and encipher your own text by using one of the provided presets based on one of the provided historical machine configurations:

  • Commercial Enigma (1924)
  • Wehrmacht and Kriegsmarine (1930)
  • Wehrmacht and Kriegsmarine (1938)
  • Swiss K (1939)
  • Kriegsmarine M3 and M4 (1939)
  • German Railway (Rocket; 1941)
  • Kriegsmarine M4 with thin reflectors (1941):

Using one of the presets is easy:

var message = "FYNYDD IS A SOFTWARE DEVELOPMENT AND HOSTING COMPANY";

var machine = new Machine(new MachineConfiguration
{
    MachinePreset = MachinePresets.Commercial_1924,
    PlugBoardWires =
    {
        { 'A', 'T' },
        { 'B', 'V' },
        { 'C', 'M' },
        { 'D', 'O' },
        { 'E', 'Y' },
    }
});

var enciphered = machine.Encipher(message.ToString());

Assert.NotEqual(message.ToString(), enciphered);

machine.Reset();

var deciphered = machine.Encipher(enciphered);

Assert.Equal(message.ToString(), deciphered);

Example 2: practical usage

It's even easier to use the Enigma Machine for modern encryption, since all you need to provide are a cipher key, nonce, and the number of relevant machine components. There's no need to change rotor ring positions and rotations, or set plug board wire pair values, since your cipher key and nonce are unique and drive the creation of all machine components.

Here's an example of using the Enigma Machine without a historical preset:

var message = @"
Fynydd is a software development & hosting company.
Fynydd is a Welsh word that means mountain or hill.
";

/*
    AES key must be 16, 24, or 32 bytes for AES-128, AES-192, or AES-256
    Nonce or initial counter value must be 16 bytes
*/

var machine = new Machine(
    "ThisIsA32ByteLongSecretKey123456",
    "UniqueNonce12345",
    rotorCount: 6,
    plugWires: 47);

var enciphered = machine.Encipher(message.ToString());

Assert.NotEqual(message.ToString(), enciphered);

machine.Reset();

var deciphered = machine.Encipher(enciphered);

Assert.Equal(message.ToString(), deciphered);

You can also create a custom machine by assembling the virtual components, and more. Check out the project on Github.

Want to know more?

There's usually more to the story so if you have questions or comments about this post let us know!

Do you need a new software development partner for an upcoming project? We would love to work with you! From websites and mobile apps to cloud services and custom software, we can help!

Sfumato 5.1 released

Michael Argentini Avatar
Michael ArgentiniThursday, December 12, 2024

Sfumato CSS 5.1.0 has been released! This update includes the following changes:

  • Update to .NET 9
  • Updated nuget packages
  • Update to Dart Sass 1.82.0
  • @apply statements now work in SCSS @import files; the @apply statements are now processed on the final generated CSS file instead of the root SCSS file

For more information, see the Sfumato project page.

Want to know more?

There's usually more to the story so if you have questions or comments about this post let us know!

Do you need a new software development partner for an upcoming project? We would love to work with you! From websites and mobile apps to cloud services and custom software, we can help!

.NET 9 released

Michael Argentini Avatar
Michael ArgentiniTuesday, November 19, 2024

.NET 9 was officially released during .NET Conf. This release feels like a LTS release; full of speed improvements and quality of life features and refinements, even if you only use it as a drop-in replacement for .NET 8.

© 2025, Fynydd LLC / King of Prussia, Pennsylvania; United States / +1 855-439-6933

By using this website you accept our privacy policy. Choose the browser data you consent to allow:

Only Required
Accept and Close