Explore Teos Technology services, products, insights, and ways to connect with our team.
As we enter a new era defined by technological advancements, the rise of Artificial Intelligence (AI) presents both incredible opportunities and significant challenges. The choices we make about integrating AI into our workforce and society will shape not only our job market but also the well-being of our communities. This pivotal moment prompts us to consider: will we forge a future marked by prosperity and inclusion, or face a dystopian reality of inequality and despair?
The Dual Paths: The Possible Consequences of Unchecked AI
Imagine a world where AI is used solely for profit. In such a scenario, wealth could accumulate among a small elite, leading to sky-high unemployment rates—potentially reaching 50% or more for those without specialized skills. When large segments of the population are jobless, their spending power diminishes, triggering a severe economic downturn.
For instance, during the 2008 financial crisis, unemployment rates in the U.S. peaked at 10%. If we allow unregulated AI development to increase unemployment, we could see much worse outcomes. Without jobs, people cannot buy even basic necessities, which further harms businesses and leads to more layoffs, creating a vicious cycle. Ultimately, this could heighten social unrest and conflict, not only within our borders but internationally.
Embracing a Different Vision: Productive and Inclusive Work
On the flip side, we have the chance to reshape our economy toward a more inclusive future. With the rise of generative AI, productivity is rapidly improving. Workers utilizing AI tools for as little as 30 hours a week may outperform those working traditional 40-50 hour weeks. Research indicates that productivity can increase by over 40% when workers leverage AI effectively.
Looking ahead, an individual laboring just 20 hours a week with AI might generate the same output as someone putting in 60-80 hours a decade ago. This leads us to a pressing question: should we tie compensation primarily to hours worked or productivity achieved? It seems unjust to pay workers less simply because they accomplish more in less time.
A Revolutionary Employment Model: Fostering Balance
At Teos, we see the need for a new employment model. We advocate for a system where full-time employment could involve fewer hours while maintaining the same pay. By focusing on productivity, we aim to avert the economic collapse threatened by an unchecked AI implementation.
Currently, we consider 30 hours a week, aided by AI tools, as full-time work—providing benefits like health insurance and retirement plans essential for employees' well-being. Future adjustments may allow a reduction to 20 hours per week, giving workers more personal time while ensuring they contribute meaningfully to their roles.

The advantages of this approach are clear. First, it improves work-life balance, enabling workers to spend more time on personal interests, family, and community. Second, it keeps the economy vibrant by allowing more people to have money to spend, boosting economic growth rather than leading to stagnation.
Modeling the Future: Inspiring Change Across Industries
The methods we are developing at Teos are just the beginning. By demonstrating that a successful economic model can thrive with reduced working hours while enhancing productivity, we seek to inspire others, especially small businesses, to reconsider their approaches.
Imagine a reality where individuals can explore passions outside a traditional work schedule while still receiving fair pay. This vision is attainable through collaborative effort and a commitment to new employment models.

It's vital for employees, employers, and policymakers to engage in discussions about AI's effects on employment. We must push for systems that prioritize human well-being and promote shared prosperity. Open and inclusive dialogue will help us find pathways that benefit everyone and reduce the risks tied to AI's economic impact.
Determining Our Future: A Call to Action
In conclusion, we are indeed at a significant crossroads regarding AI, and our choices carry immense weight. Will we let technology exacerbate inequality and lead to social unrest, or will we harness its power to redefine work positively for all? The second path—focused on innovation, inclusivity, and reimagined work structures—offers a hopeful vision.
By acknowledging AI's potential for productivity while retaining the human element, we can create an economy that serves everyone—shaping a future defined by shared prosperity and well-being.
Let’s champion a brighter future where technology empowers individuals to thrive, steering us away from an economic collapse. Our collective actions today will influence the future of work and society for generations to come.

In recent years, artificial intelligence (AI) has emerged as one of the most transformative technologies of our time. While some fear its potential to increase wealth concentration and displace jobs, AI also offers immense opportunities for social good. By adopting AI in ways that benefit all, we can pave the way for a more equitable, efficient, and prosperous world. Here are ten ways AI can benefit humanity.
1. Revolutionizing Healthcare
AI has the potential to dramatically change healthcare by improving diagnostics and personalizing treatment. Advanced machine learning algorithms can analyze large datasets to identify health patterns, predict disease outbreaks, and assist in drug discovery. A study from the Journal of Medical Internet Research shows that AI can reduce misdiagnosis rates by up to 30%.
Imagine AI helping doctors detect diseases like cancer early through enhanced image recognition. This could lead to timely interventions that improve patient outcomes and save healthcare systems billions in costs.
2. Enhancing Education
AI can create personalized learning experiences for students of all ages. Intelligent tutoring systems can adapt lessons according to individual learning speeds and styles, thereby improving retention. For instance, a report from McKinsey found that personalized education can dramatically improve student performance by 10-30%.
By democratizing access to quality resources, AI can help students in underserved communities thrive. Instead of a one-size-fits-all curriculum, classrooms can cater to each student's unique needs, fostering a more skilled workforce for the future.
3. Tackling Climate Change
AI can be a game-changer in the fight against climate change. It enhances energy efficiency, improves resource management, and monitors environmental changes effectively. For example, AI algorithms can optimize electric grid performance, leading to a 10% reduction in energy consumption based on a study by PwC.
Using AI to analyze climate data can lead to smarter city designs and sustainable agricultural practices. Such initiatives can lower carbon footprints, helping us transition to a greener future.

4. Improving Public Safety
AI can enhance public safety measures through data analysis of crime patterns and traffic situations. Predictive policing uses AI to analyze historical data, which can help reduce crime rates by 20% in some areas, according to the Urban Institute.
While responsible implementation is critical, AI has the potential to create safer public spaces, ensuring our communities are protected more effectively.
5. Increasing Accessibility
AI's ability to enhance accessibility for individuals with disabilities is compelling. Tools like speech recognition, text-to-speech, and computer vision can make information more navigable and comprehensible. According to the National Center for Learning Disabilities, AI-supported technologies can improve student access to education for 8% of the population in the U.S. who has learning disabilities.
By breaking down barriers, AI can create an inclusive society where everyone, regardless of ability, has equal access to opportunities and services.
6. Advancing Agricultural Practices
AI can revolutionize agriculture, improving crop yields and sustainability. Machine learning algorithms analyze factors like soil health and weather patterns to recommend effective planting strategies. For instance, a report from the Food and Agriculture Organization indicates that AI could help reduce waste by up to 30%.
This leads to increased food security and benefits populations in developing regions where food shortages remain a pressing concern.

7. Facilitating Humanitarian Aid
AI can improve humanitarian aid distribution by analyzing data to identify needs and optimize delivery methods. Natural language processing allows NGOs to gauge sentiment through social media and news, enhancing response strategies. During the 2015 Nepal earthquake, AI supported real-time assessments, helping channel aid quickly.
In crisis situations, AI makes humanitarian efforts more effective and efficient, saving lives in affected communities.
8. Empowering Individuals with Financial Literacy
Financial literacy is vital for economic empowerment. AI tools offer personalized advice, budgeting tips, and investment insights. Such tools can help individuals make smarter financial decisions, leading to increased savings and investments.
A study from the Financial Planning Association states that financial empowerment through AI tools could help reduce the wealth gap, allowing more individuals to achieve stability and independence.
9. Streamlining Governance
AI enhances governance by increasing efficiency and transparency in public services. Analyzing data from various public sources helps identify government inefficiencies and streamline processes. According to a report by Deloitte, AI can improve public service delivery speeds by 25%, benefiting citizens with real-time access to government services.
This fosters trust and engagement between governments and their citizens, contributing to a more participatory democratic process.
10. Unlocking Creative Potential
AI extends beyond functional applications; it also boosts creativity. Technologies like generative design and AI-assisted art creation allow individuals to explore new forms of expression. A report from Adobe highlighted that 61% of creatives believe that AI will play a significant role in how creative content will be generated in the future.
By enabling more people to innovate and create, AI cultivates a vibrant cultural landscape that enriches society as a whole.
The Path Forward
The potential of AI to uplift humanity is only limited by our imagination and willingness to implement it responsibly. By focusing on inclusive and equitable applications, we can transform lives and enhance our future.
To ensure AI serves the greater good, advocacy for ethical development and accessible technology is crucial. With a collective effort, we can harness AI’s power to build a tomorrow where everyone can thrive, creating a just and fair society for all.

As software development continues to change, artificial intelligence (AI) is becoming essential in boosting productivity and efficiency. One clear example of this trend is the rise of AI code generation tools. These tools help developers write, test, and debug code more quickly than ever before. In this article, we will explore various AI code generation tools that cater to different programming languages and IDEs. We will look at their costs, manufacturers, technologies, notable features, and limitations.
C#
For C# developers, GitHub Copilot stands out as a powerful AI code generation tool.
-
Cost: Free for individual developers with GitHub accounts; subscription options available for teams.
-
Manufacturer: GitHub, in partnership with OpenAI.
-
Technology: Built on OpenAI’s Codex model.
-
Features:
-
Context-aware code suggestions tailored to your current project.
-
Generates code based on your comments and function names.
-
Autocompletes code snippets to match your unique coding style.
-
-
Limitations: Can generate code that is incorrect or insecure, as it is sometimes outdated concerning new libraries.
GitHub Copilot has already helped developers increase their coding speed by approximately 20%, according to user feedback.
C++
For C++ developers, Replit provides noteworthy AI features that can enhance coding efficiency.
-
Cost: Free to use, with optional premium features available.
-
Manufacturer: Replit, an innovative online coding platform.
-
Technology: AI-driven code interpreter and analysis tools.
-
Features:
– Real-time collaboration with AI suggestions for improved teamwork.
– Integrated development environment that supports multiple programming languages.
– Offers debugging assistance to streamline the troubleshooting process.
-
Limitations: May not handle complex C++ constructs well, resulting in incomplete suggestions.
Replit reports that users experience a 30% reduction in debugging time when using their platform’s AI tools.
C
When working with C, Codeium has gained popularity among developers for its robust features.
-
Cost: Free and open-source for everyone to use.
-
Manufacturer: Codeium, specializing in AI-powered code assistance.
-
Technology: Utilizes deep learning and natural language processing for accurate code suggestions.
-
Features:
– Offers comprehensive code completion and snippet generation.
– Provides on-demand documentation references for quick access to information.
-
Limitations: Being relatively new, it may produce occasional inaccuracies.
Early users of Codeium have found that it can enhance their coding speed by about 25%, particularly in code completion tasks.

JavaScript/TypeScript
For JavaScript and TypeScript developers, TabNine is a well-regarded AI-powered tool.
-
Cost: Free tier available; Pro features are accessible through subscription plans.
-
Manufacturer: TabNine, a company dedicated to machine learning in code generation.
-
Technology: Leverages neural networks trained on data from GitHub and other code repositories.
-
Features:
– Offers support for multiple programming languages beyond JavaScript and TypeScript.
– Learns and adapts to your coding patterns for more personalized suggestions.
-
Limitations: Performance can vary depending on the chosen model; older models may offer less effective suggestions.
TabNine's adaptive learning can lead to a significant increase in productivity, with some users claiming efficiency gains of up to 40%.
Python
Python developers can benefit from using CodeGPT, a popular AI code assistant.
-
Cost: Free version available, though a Pro subscription unlocks more features.
-
Manufacturer: CodeGPT, a collaborative platform for various AI tools.
-
Technology: Based on the GPT-3 model, optimized for coding tasks.
-
Features:
– Generates context-relevant code snippets based on user inputs.
– Capable of answering questions about programming concepts and debug issues.
-
Limitations: May struggle with complex projects involving multiple files or libraries.
Users of CodeGPT have reported enhanced productivity, with many noticing up to a 25% reduction in time spent on coding tasks.
SQL
For SQL developers, OpenAI SQL Generator is another valuable AI tool to consider.
-
Cost: Free with usage limitations on the number of queries.
-
Manufacturer: OpenAI.
-
Technology: Utilizes advanced machine learning and natural language processing.
-
Features:
– Generates SQL queries from plain language requests, making it accessible even for beginners.
– Provides real-time recommendations based on existing database structures.
-
Limitations: Coverage for all SQL dialects is not guaranteed, and complex queries may lead to inaccuracies.
The OpenAI SQL Generator can significantly reduce query writing time, with an estimated savings of 50% for users new to SQL.

Bringing It All Together
The landscape of AI code generation tools is continuously growing. Developers in programming languages like C#, C++, C, JavaScript/TypeScript, Python, and SQL have access to numerous free tools that can greatly improve their coding efficiency.
Technologies such as OpenAI Codex and neural networks are leading this movement, but developers must remain aware of their limitations. As the field develops, we expect to see even more advanced tools come to market, enhancing their capabilities and accuracy.
As we move towards 2025, it is essential for developers to stay updated on these innovations to keep their skills relevant in an evolving tech world. The future of coding will likely be shaped by the integration of AI tools, making it crucial for developers to explore how these resources can transform their software development processes.
Stay alert for these advancements and discover how AI code generation tools can enhance your productivity!
Artificial Intelligence (AI) is no longer a futuristic concept; it is here, and it's reshaping software development. For developers eager to dive into AI, the range of tools and frameworks available can seem overwhelming. However, getting started does not need to be daunting. This guide provides essential steps to embark on your AI journey confidently.
Understanding the Basics of AI
Before jumping into specific technologies, it’s important to grasp the fundamental concepts of AI. AI includes subfields such as machine learning, natural language processing, computer vision, and robotics.
Consider machine learning, for instance. This subfield can be divided into categories:
-
Supervised Learning: Here, algorithms learn from labeled data. Imagine training a model to recognize spam emails based on prior examples. Reports show that supervised learning can improve spam detection rates by up to 98%.
-
Unsupervised Learning: In this case, algorithms identify patterns in data without prior labels. A common use is clustering customer behavior, helping businesses tailor their marketing strategies effectively.
Understanding basic terminology—like neural networks and algorithms—will be crucial as you advance in your AI career.

Learn a Programming Language Suited for AI
If you already have programming experience, you're on the right track! Some languages are particularly effective for AI development. Python is a top choice due to its straightforward syntax and powerful libraries. For example, TensorFlow, born from Google's innovation, is used to create deep learning models that have achieved state-of-the-art results in image recognition—one notable implementation improved accuracy by 20% over previous standards.
While R is excellent for statistical analysis and Java can handle large applications, sticking to Python may ease your learning curve significantly. Consider enrolling in online Python courses focused on AI, which can accelerate your journey.
Explore AI Frameworks and Libraries
After gaining programming skills, immerse yourself in essential AI frameworks that simplify complex tasks. A few popular libraries include:
-
TensorFlow: Ideal for building and training deep learning models, used by companies like Airbnb for improved search recommendations.
-
Keras: This high-level API, which runs on TensorFlow, helps beginners prototype machine learning models quickly.
-
PyTorch: Increasingly popular among researchers, PyTorch offers flexibility through its dynamic computation graphs and is favored by organizations like Facebook for natural language processing tasks.
Familiarity with these frameworks equips you to implement machine learning algorithms and create AI applications effectively.

Dive into Projects
Hands-on experience is invaluable. Start with projects that spark your interest. For example, build a simple recommendation system similar to those used by Netflix, which analyzes user behaviors to suggest shows they might enjoy. Alternatively, you could develop an image recognition app that classifies pictures based on their content, like Google Photos.
Utilizing platforms like GitHub for showcasing your work can build credibility within the AI community. By contributing to open-source projects, you gain experience and create valuable connections. Participating in Kaggle competitions also helps you sharpen your skills against real-world data challenges—many users report enhancing their machine learning skills by 50% after participating.
Enhance Your Knowledge with Online Courses and Resources
Learning is a continuous process, especially with AI's rapid advancements. Many online resources cater to AI learners, such as Coursera, Udacity, and edX, which offer structured programs often created by industry leaders. Completing AI-focused MOOCs can deepen your understanding, taking you from basics to advanced machine learning topics.
Also, consider reading impactful books like "Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow". This book helps bridge theory with practice, providing real case studies to solidify understanding.
Engage with the AI Community
Engaging in AI communities is a fantastic way to stay current with trends and learn from others. Join forums like Stack Overflow and subreddits dedicated to AI discussions to access a wealth of knowledge and networking opportunities.
Participate in local meetups or online webinars to share ideas, seek feedback on your projects, and connect with seasoned professionals. Networking in this way could lead to valuable mentorships or career opportunities.
Stay Current with AI Trends and Innovations
AI technology evolves quickly. It’s important to keep up with the latest developments, trends, and tools. Follow reputable blogs, listen to AI podcasts, and subscribe to newsletters designed for developers.
For example, tracking advancements in machine learning techniques and tools can enhance your skill set significantly. It’s reported that staying updated with trends can lead to a 30% increase in job opportunities for developers.
A New Frontier Awaits
Entering the AI landscape may initially feel overwhelming, but with the right resources, tools, and community support, it transforms into a rewarding adventure. Embrace this challenge by mastering programming languages, experimenting with frameworks, and engaging with your peers. By consistently learning and exploring, you'll not only improve your skills but also position yourself at the forefront of this innovative field.
As you begin this exciting journey, remember to stay patient, curious, and eager to learn. The world of AI presents limitless opportunities for developers ready to explore. Happy coding!

In the fast-paced world of technology, there are moments of change that reshape entire industries. Today, we stand at a pivotal moment in software development where artificial intelligence (AI) is set to redefine how applications and websites are created. Imagine being able to describe your desired application or website, and an intelligent system generates it for you. This transformation presents a unique opportunity. Choose to embrace this technology, or risk being left behind as the industry rapidly evolves.
The Rise of AI in Software Development
Artificial intelligence is advancing at a remarkable pace, prompting various industries to reassess their operations. In software development, AI’s ability to analyze vast amounts of data quickly is streamlining processes. Developers can now focus more on creativity and innovation.
For instance, AI tools like GitHub Copilot can suggest code snippets as developers type. This feature can speed up the coding process by 30%. Additionally, platforms such as OpenAI Codex allow for natural language input, enabling a wider range of people to develop software—even those without formal programming training.
Investments in AI for software development are soaring. According to a recent report, companies are expected to allocate over 25% of their technology budgets to AI tools by 2025. This trend indicates that traditional methods of software development, which often rely heavily on human resources and lengthy timelines, are on the brink of a significant transformation.
AI's potential to automate repetitive tasks and optimize workflows could cut development time by as much as 50%. This accelerated pace will enable teams to bring applications to market faster than ever before.

Understanding the Implications
As this technology continues to evolve, it’s vital to consider its implications for developers, businesses, and consumers. For developers, integrating AI tools into their workflows is becoming essential. By adapting to these tools, developers can enhance their skill sets and provide greater value to their organizations.
In contrast, those resisting this change may struggle as the industry adapts around them. A study found that developers familiar with AI tools are 50% more likely to find better job opportunities than those who are not.
Furthermore, the shift towards AI-driven development could democratize technology. Individuals without traditional coding backgrounds could start bringing their ideas to life, igniting innovation across diverse sectors and transforming the software market.
Embracing AI: The Path Forward
So, how can developers and businesses effectively prepare for this AI-centric future?
Learn About AI Tools and Platforms
Getting acquainted with AI-driven development platforms is crucial. Tools like GitHub Copilot and OpenAI Codex can help you write code faster and more efficiently. Taking the time to understand how these platforms work will significantly improve your workflow and productivity.
Experiment with AI Capabilities
Hands-on experience is vital. Use AI to create simple applications or automate repetitive tasks. For instance, applying AI in your daily coding activities can dramatically improve your efficiency and understanding of best practices.
Focus on Problem-Solving and Creativity
While AI excels at automating many coding tasks, the human element—creativity and critical thinking—remains essential. Concentrate on enhancing your problem-solving skills and design thinking. These attributes will become increasingly valuable in collaborative environments where humans and AI work together.

The Future Is Collaborative
Looking forward, it’s clear that AI will not displace developers but will redefine their roles. The future will hinge on collaboration between humans and AI. This relationship allows developers to focus on more meaningful work. By transferring routine tasks to AI, developers can devote more time and creativity toward enhancing user experiences and innovating new features.
The Node of Continuous Learning
A commitment to lifelong learning is essential in this evolving landscape. The technologies that support AI are continuously changing, so staying informed will be key to maximizing their benefits. Consider enrolling in online courses, attending webinars, or joining community forums to keep up-to-date with the latest AI tools in software development.
Embracing Change vs. Resisting It
You have a decision to make: embrace the AI revolution or resist it. Those who recognize this opportunity for growth and innovation stand to gain immensely. Adaptability is crucial in technology. Clinging to outdated knowledge can leave you at a significant disadvantage. Those who use AI to boost their creativity and productivity will succeed in this dynamic environment.
Innovating with Purpose
Developers and businesses should innovate with intention. When integrating AI, consider how it can enhance workflows, improve collaboration, and lead to advancements in your software. The ultimate aim is to create more effectively and provide better experiences for users.

The Horizon of Software Development
The entry of AI into software development marks a significant milestone in the tech industry. This transformation is not about replacing human developers but about enhancing their abilities and expanding potential.
By choosing to learn and collaborate with AI tools, developers can redefine their careers, create superior applications, and contribute to a more innovative future. Embrace this transformative journey and be ready for the advancements that lie ahead. The choice is yours, and the possibilities are endless.
Are you prepared to seize the opportunity? The future is within reach!
Using Node.js, React.js, SASS, Jest, xUnit, Moq, NLog, Identity Framework, Entity Framework, and dependency injection

By now, I hope you've had a chance to check out Visual Studio 2022. I recently used it to create my first .NET 6 single-page application (SPA), using Node.js for hosting, React.js for a responsive frontend, Identity Framework for Authentication and Authorization, Entity Framework for data access, SASS for awesome styling, dependency injection, NLog for logging, and Jest, xUnit, plus Moq for automated testing the entire thing. This provides a robust framework, for building powerful, high-quality applications. In this tutorial, we’ll walk through the steps to set everything up.
Install Visual Studio 2022

First, if you haven’t done so, download and install Visual Studio (VS) 2022. The Community version is free and has all the features you need, for non-enterprise development.
Create the Project and Solution
Once you have Visual Studio 2022 installed, it’s time to create the project and solution. On the Visual Studio start screen, click on Create a new project.

This will bring up a wizard that lets you select the type of project to create. For our purposes, we’re going to select ASP.NET Core with React.js. Once you’ve selected it, click Next to enter the project name and location.

This brings us to the Configure your new project screen. Here, you’re going to enter your Project name, select the Location of your repository, and set the Solution name, which by default is the same as the Project name. Once you’ve set the names and location, click Next. For this tutorial, I'll be using the name Net6ReactApp.

That leads us to the Additional information screen. Here, we’re going to select .NET 6 (Long-term support) for the Framework. The Authentication type really depends on how you’re planning to authenticate your users. If anyone can use the app, then select None. For basic login functions, Individual Accounts sets up the fundamentals for user accounts. If you require Windows Authentication, then you'll have to go back a step and select the ASP.NET Core MVC application template and manually add React later.
We’re going to select Individual Accounts, because it uses Microsoft Identity Framework, which gives us an excellent platform, for authentication and authorization. Leave Configure for HTTPS configured, so the app’s connections to the users will be secure.

Once you have everything entered and selected, click Create, to have Visual Studio scaffold-out your new project. Once Visual Studio is finished creating your project and solution, it will take you to an overview of your app. Feel free to have a look around your solution, or explore some of the documentation, on the overview page. I’ll cover publishing your app to the cloud in a future article.

Run the App
As the project was scaffolded, Visual Studio created all the necessary files to run your React.js app using Node.js. When you’re done looking around, click on the Debug button on the toolbar to run the app. If you don't have the Debug button on your toolbar, right-click on the toolbar and select Debug from the list of options.
The first time you run the app, it has to restore all of the Node.js packages with Node Package Manager (NPM), which can take several minutes. Once NPM is finished, you’ll be prompted to trust the self-signed SSL certificate. This avoids getting a security warning when you view the app in a browser. Click Yes to continue.

This will lead to a more serious sounding prompt. Just click Yes again to trust the certificate.

Upon trusting the certificate, the website should start to load in the browser.

While the site loads, you may be prompted, by Windows Defender Firewall, to allow access to Node.js. This is required for the site to operate correctly, so click Allow Access.

Finally, after everything has loaded, Node.js will serve up your new single-page application (SPA). Take a look around the site to learn about your app.

Explore the Solution
After you’re finished looking around, let’s take a look at Solution Explorer. We have a Properties folder, which has important settings for the app. There’s also a ClientApp folder. This is where the React.js code for the project resides. Just like regular MVC projects, you’ll find Controllers and Models directories. In the Data folder, you’ll find the Entity Framework context and migrations. There’s also a Pages folder for the few pages that React.js won’t be handling, like an error page. Finally, we have appsettings.json and Program.cs for launching and initializing up the app.

Dependency Injection, Authentication, and Authorization
If you take a look at Program.cs, you’ll notice that we’re already set up for dependency injection. It initializes authentication and authorization, using Microsoft Identity Framework. This is because we selected Individual Accounts during scaffolding. It also sets up Entity Framework, URL routing, and HTTPS redirection.
Program.cs
Add NLog for better logging
Every app needs logging, in order to gain insight into what the app is doing, at any given time. ASP.NET has some basic support for logging, out of the box. However, for more power and flexibility, we’re going to use a popular third-party logger named NLog. It’s highly configurable. You can log to a file or database, and you have complete control over everything that gets logged.
Add NLog.Web.AspNetCore NuGet Package
To get started, first install the NLog NuGet package. If you’re not familiar with how to get there, just right-click on the project, and select Manage NuGet packages… from the context menu.

Next, search for NLog.Web.AspNetCore, under the Browse tab. Once you locate it, select the latest stable version, then click Install. It should be pretty quick, and it will pop up a readme.txt file, when it’s complete.

Configure NLog
After installing the NLog NuGet package, it’s time to configure it. The settings for NLog reside in nlog.config, which we’ll have to create. To do this, right-click on the project in Solution Explorer. Click Add on the context menu, then New Item…

This will bring up a dialog box. Select Text File and enter nlog.config as the filename.

Once the file is created, copy and paste the following configuration XML into the file. For complete information on the configuration options, visit the NLog config section on their website.
Once you’ve copied the content into the nlog.config file, replace instances of Net6ReactApp with the name of your own app, and make any other changes you’d like.
nlog.config
Once the nlog.config file is finished, we need to update appsettings.json. Locate the Logging section and set the LogLevel.Default to Trace. This will give us more verbose logging. If you’d rather less detailed logging, skip this step.
appsettings.json
Initialize NLog in Program.cs
Next, we need to update Program.cs to initialize NLog and set up dependency injection. Add the following statements at the top of Program.cs.
After adding the initialization code, wrap the remaining code in the file with a try block, with the following catch and finally blocks:
Finally, we need to set up NLog for dependency injection. Insert the following code right above the var app = builder.Build(); statement.
Using NLog
In order to use NLog in your app, simply inject a new logger in the constructor, as seen below, and call the appropriate Log method.
Once you have it all set up, run the app to see if you get a log file, where you’re expecting it.
Add SASS for better styling
Syntactically Awesome Style Sheets (SASS) has become the standard technology for improving cascading style sheets (CSS). It extends CSS, adding a bunch of new, useful functionality. We’re going to be adding SASS to our application, using the steps below.
There is already a CSS file called custom.css under ClientAppsrc. We’re going to rename that to custom.scss to make it a SASS file.

Next, we need to replace the reference to custom.css in App.js with a reference to bundle.css. This tells it to use the bundle.css file, which will be created, from the SCSS files.

Now it’s time to add some Node packages, using the following command:
After installing all the packages required by SASS, we need to edit the package.json file and add the following two lines to the “scripts” section:

Next, we have to configure Webpack, to bundle our SCSS file. Create a webpack.config.js file in your ClientApp folder. Next, populate it with the following contents. You can add more SCSS and JavaScript files by adding the filenames to the entry value array.
webpack.config.js
In order to test everything out, enter the following command in your Node.js window. This will bundle the src/custom.scss file into public/bundle.css.
If all goes well, you should see bundle.css in ClientApp/public

It also creates a bundle.js file, which needs to be included in the project. If you want to automate this process, I suggest you add a pre-build event to the project, which executes the npm run webpack-dev command.
Add Automated Testing for more reliable code
When it comes to ensuring code quality and program correctness, nothing beats automated testing. For our app, we need to test both the frontend JavaScript code and the backend C# code. We’re going to be using xUnit for backend testing, because it’s fast, powerful, and it plays nice with .NET 6. It requires a little bit of setup, which we’ll cover.
For frontend testing, we’re going to use Jest, because it’s created by the same folks that created React, and it comes set-up, right out of the box. Below, I’ll explain the steps necessary to do both backend and frontend automated testing.
Frontend Testing
React was actually designed with unit testing in mind, making it easy to test. In fact, when we scaffolded our project, it automatically set up Jest for running tests. It also created a sample test, App.test.js.

App.test.js
The scaffolding process also created a test script in package.json.

Using Jest
To run the tests, all we need to do is open a Node.js command prompt and navigate to the ClientApp folder. From there, run the following command, and if all goes well, you should see something similar to the output below..

That’s all the setup that’s required for front-end unit testing, using React and Jest. From here, you’re free to add more tests, as you develop your code.
Backend Testing
As mentioned, for testing our C# code, we’re going to be using xUnit. When .NET Core first came out, it was the recommended testing framework. Now there is support for others, but xUnit is still a favorite by many, because it is fast and easy to use.
Install xUnit
To install xUnit, open Package Manager Console in Visual Studio, under the Tools menu.

This will bring up the Package Manager Console window.

In the console, change to the directory with your project name and enter the following command.
That will install the required MS testing SDK. Next, we need to install xUnit itself, using the following command.
After running the command, you should see something similar to this:

Next, we need to add xUnit to the Visual Studio Task Runner, with the following command:
Finally, we need to install Coverlet Collector, using this command:
With xUnit now installed, we can create our first unit test. We’re going to write tests for the WeatherForecastController class, which was created, when we scaffolded our project.
WeatherForecastController.cs
It’s always recommended, to place your unit tests, in a separate project, so we’ll need to create one. Right-click on the solution in Solution Explorer, and select Add, then New Project…

In the dialog, locate xUnit Test Project and click Next

Give the new project the same name as your project, with the word Tests appended to the end.

For the framework, choose .NET 6.0 (Long-term support), then click Create, as seen below.

Once we have our new unit test project added to our solution, it’s time to write our first unit test. Select WeatherForecastController in Solution Explorer, then on the Search bar at the top of Visual Studio, type Create Unit Tests and hit Enter.

This will bring up the Create Unit Tests dialog. Select xUnit.net 2.0 for the Test Framework, and leave the other default options. If you don’t see xUnit.net 2.0 under Test Framework, ensure that you have the Visual Studio 2022 extension xUnit.net.TestGenerator2022 installed.

Once you click OK, VS 2022 will scaffold the xUnit tests for us, and it should create a WeatherForcastControllerTests class.

You may notice that Net6ReactAppTests has a missing dependency.

Right-click on Microsoft.NET.Test.Sdk and click Update…

Update any dependencies that require updating, and the errors should go away.
Install Moq
Now, in order to enhance our xUnit tests, we’re going to add Moq. We’ll use Moq as our mocking framework, because it’s versatile, simple to use, and it’s incredibly well-known. If you aren’t familiar with mocking, it allows you to create mock implementations for interfaces and configure them with expected behaviors. Then, after the test has run, the mock can verify whether the expected behavior occurred. For more information, check out my other blog posts on mocking and unit testing. To install Moq, into our xUnit tests project, right-click on your tests project and select Manage NuGet Packages…

Once NuGet Package Manager opens, search for Moq and install the latest stable version.

Using xUnit
Now that Moq is installed, open WeatherForecastControllerTest.cs in your Tests project. Copy the following code into your the file.
WeatherForcastControllerTests.cs
Be sure to replace the namespace with the namespace of your app. Once you’ve completed finished with this file, it’s time to open up Test Explorer and run the test.

Once in Test Explorer, click the icon to Run All Tests In View.

This will build the projects and run all the xUnit tests.

Once the tests complete, you should see them show as passed.

This concludes setup, for automated testing the backend C# code. From here, you're free to add more tests, for your custom code.
Wrapping Up
At this point, if everything went well, you should have a fully functioning .NET 6 React single-page application. The app includes the entire framework you need, to create a high-quality, responsive site, using .NET 6, Node.js for hosting, React.js for a responsive frontend, dependency injection, Identity Framework for Authentication and Authorization, Entity Framework for data access, SASS for awesome styling, NLog for logging, and Jest, xUnit, plus Moq for testing the full stack.
I hope you enjoyed this article. Look for my upcoming walkthrough, on deploying the app to Azure, using Azure DevOps Pipelines. Then you'll have the complete picture from project creation, through deployment and hosting in the cloud.
Until next time, happy coding!

When an engineer makes a change to source code or tests, there are multiple steps before that change finally makes it into production. In the most basic form, these steps can merely consist of a developer compiling code on their development machine and copying the output to the production environment. Don't do this. Just don't.
This introduces innumerable opportunities for human error. In order to truly provide reliable deliveries, this process should be automated from end to end. To take it a step further, multiple stages of testing should be incorporated, along the way, to ensure the quality of the release.

Figure 1: Delivery Pipeline
To begin eliminating human error, some automated workflow needs to be put in place. This consists of a gated build, a continuous integration build, and one or more release definitions. Each build provides another layer of confidence in the quality of the delivery.
It all starts when a software engineer or quality engineer makes a change to source or test code. In order to ensure that the change passes basic inspection, we set up a gated build. The gated build is triggered automatically when the developer attempts to check in a change. It builds the code and executes the unit tests. Only if the code compiles and all unit tests pass, will the change actually be committed to source control.

Figure 2: Gated Build
This ensures the health of the code-base in two ways. First, the change actually compiles, thereby preventing blockers for other developers. It is very costly for development to halt, because somebody checked in something that doesn't compile. Second the unit tests ensure that each individual part of the code works as designed. This is the first layer of protection from costly regression errors.
Once the change hits source control, another process is set into motion. The change is retrieved from source control and built, similar to the gated build. This time, however, instead of running unit tests, the build executes functional, integration, and system tests.

Figure 3: Continuous Integration Build
Each type of testing provides an additional level of confidence in the final product. Functional testing verifies that the individual components behaves according to the requirements. Integration testing ensures that the components work together, and finally, system testing validates the entire system as a whole.
This type of build is known as a continuous integration build, because every change is automatically integrated into the system. Then it is tested against the complete system.
If any test fails along the way, then the entire build fails. It's only if all tests pass that the build artifacts get turned into a release. The entire process is depicted in the following flowchart.

Figure 4: Delivery Workflow
Each step along the way can be automated. For safety and accountability, it's a good idea to add some human control along the way. This is provided at two stops in the chain. The first is creating the release from the build artifacts. Just because you check something in doesn't mean you want to turn it into a release. So this part is left up to a human.
Second, after creating a release, it is up to the humans to decide what to do with it. In an ideal situation, there should be at least three release environments: quality assurance (QA), pre-production, and production. Once a release has been made, it can be deployed to any of these environments.

Figure 5: End-to-End Delivery Pipeline
The release would first be deployed to a QA environment, where it would be tested throughout development. When the change is ready to be hardened for an upcoming delivery, the same release can then be deployed to pre-production. Once the team and client are confident in the final quality of the release, it can be deployed to production.
Automating the delivery pipeline takes the guesswork out of providing quality releases. It frees the engineers to focus their time and energy where it matters, rather than on the overhead of integrating changes and running tests manually. If you want to take your process to the next level, automating your delivery pipeline is an investment that will pay for itself.
Do you have your own stories or ideas about automating the delivery pipeline? I'd love to hear from you in the comments!

It's with great excitement that I am finally able to introduce the world to Teos. This company has been my vision for a very long time. Now that I have accumulated years of experience and expertise, I want to share my passion for creating great software with you. Quality and Usability have always been the core tenets of my practice, and you will hear a lot about those topics from me.

Quality is what distinguishes exceptional software from the rest. I've been in this industry long enough to have seen many ways of creating software that work. I've also seen many that don't. I'm sure I've even been guilty of a few anti-patterns in my life.
However, I've also brought successful projects to market by championing test automation, continuous integration, continuous delivery, and adherence to Agile principles. In the upcoming articles in my blog, I plan to delve deeper into each of these topics, because they all contribute to a quality product.
Software usability essentially describes the quality of the human-computer interaction. Whether you're talking about a web site, mobile app, traditional desktop application, or one of today's IoT devices, at the forefront must be consideration on how the user will actually use the thing. This can include visual elements, audio, and workflow.

I tend to favor a minimalist approach that doesn't burden the user with unnecessary information. With all of the things biding for our attention, from devices to dogs, we tend to be overstimulated in today's society. This shouldn't extend to our interaction with computers or devices.
The user should be presented with what they need, in order to accomplish what they want to do. They shouldn't have to sort through a bunch of unwanted data to find what's relevant. Think about the early search engines, and which one ended up on top.
Look forward to discussions like this, and many more, to come in the weeks to follow. In the meantime, please take a look around the site and explore the services we offer. What can Teos and you accomplish together?