An Angular / .NET 8 WebApi Application Template and Development Productivity Tools
What is LymeTemplate?
LymeTemplate is a full-stack web application template designed to quickly provide both a mature Administrative and Developer experience right out-of-box. With a focus on branding, security and communication with users, LymeTemplate allows developers to get right to work on your core business needs instead of worrying about a lot of time-consuming set up and back-office support.
A base LymeTemplate instance contains much of the code needed to support "App 101" sort of features such as user management or error reporting saving potentially hundreds of hours of time in app set up.
Provides intuitive communication tools with branded email support and useful notifications
Provides a feature-rich developer experience with tools and components for common day-to-day business scenarios.
Is accompanied by LymeTools: a set of developer productivity tools used to automate hours of tedious app development work (e.g. CRUD, Reports, Importing Data, etc)
LymeTemplate is free for personal / educational use, but is only available commercially for a fee. See the license file for more details.
API - Microsoft .NET 8 using Microsoft Azure Entra ID (formerly known as AzureAD) for User Authentication
Database - SQL Server Express 2019
Features
A LymeTemplate based web application offers lots of features and functionality to serve as a starting point for your business or organization's web application.
Industry Standards
There's nothing proprietary about LymeTemplate. It's just a curation of tools, best-practices and features built with the tools we've all come to know and love.
Security Focus
Dynamic Navigation Menu with security features for restricted access and notification badge support
Security Centric - All API endpoints are tied down to authenticated user access by default. AllowAnonymous must be specified explicitly for Anonymous requests.
Secure File Download support (restricting downloadable content to authorized users)
User / Role Management
Azure AD Authentication used for user credential management
UI for Managing Users and Roles - Security Helper Library for easy UserInfo access
Accessibility Features
Web and Mobile friendly
Printer friendly - Using the browser's default print functionality should work nicely.
Logging / Auditing
Error Logging / Notifications - Automatically Logs and Emails Server Errors to a designated recipient list.
Email Helper - Utility for assisting with the sending of emails. All emails logged to DB and searchable through an admin UI.
Activity Logs - A framework for logging events in the system. Logs are searchable and viewable through the Administrative interface.
Shared Application Configuration between the Client and API. Configuration is also bootstrapped prior to the Angular app loading.
Built in logger feature using MatSnackBar component but inspired by toastr from HotTowel.
Visual Tweaks
Improved Angular Material Styling.
Pretty slidey page-view transitions.
Customizations to Angular Material styling that give it a softer touch IMO.
User Communication
User Feedback icon and submission form w/ Admin area for feature requests, bug reports, etc.
Automatic optional prompt to reload app when it gets updated.
Message of the Day
Support for System Announcements (e.g. Emergency/Holiday closure or service disruption messages)
Other Miscellaneous Functionality
App Health Report displaying disk information as well as database and data statistics.
NEW: QuickLaunch Modal - Inspired by app launchers like Apple's Spotlight or Alfred.
NEW: GDPR Compliant Cookie Warning
NEW: Added new "Address" entity with support for Geocoding.
NEW: Added support for branding options to customize and brand emails and invoices generated from the system.
NEW: Support for Invoices / Payments / Customer Management
Programming Features / Tools
Automatically generated client TypeScript interfaces from the API using Dotnet-Typegen to make your app aware of your API models.
Shared configuration settings between the application and API.
Built with Automated Deployment / Continuous Delivery in mind.
ChangeLog Feature - Allow for Administrative users to see details of your GIT commits as a way of maintaining a list of implemented bug fixes and features.
Publish Profile - Uses a Visual Studio publish profile for deployments.
Standard Angular App - Nothing "LymeTemplate" proprietary.
NEW: LymeTools Scaffolding App - Developer / Code Generation Tools for rapid app and feature development.
Angular Services
Rest Service - for interacting with API endpoints
Clipboard Service - library making it easy to copy HTML contents to a user's clipboard.
Populate Date Ranges service making it easier to interact with popular date sayings (e.g. Yesterday, This Month, Last Year, etc)
StringFormatting Service for consistently formatting data (e.g. dates, phone numbers, addresses, numbers, currency, etc)
Generic Alert and Confirm modal support. Confirm modal can also ask for a reason for confirmation.
LocalStorage Service - for interacting with browser local storage.
Rage-click detection - Give users a warning when they rage click a button.
OpenPopup Service - Provides instructions to users as to how to enable a page that has been blocked by a popup blocker.
Report Service - Handy utility functions that make writing reports easier.
Dark-Mode support (experimental)
Shared UI Components - Expanding upon the functionality of built in frameworks
Date Range Picker - Nice date range selection UI with quick links to popular dates (e.g. Yesterday, This Month, Last Year, etc)
Card Menu - Makes a nice list of cards for app navigation.
Expanding TextArea - TextArea component that automatically grows as the text entry becomes longer.
Info Bubble - Icon with help text.
Loading Indicator - Helpful for showing a spinny thing when an app or form is loading.
Numeric Range Picker - for selecting a numeric range, duh!
Role Indicator - To indicate functionality that is only visible to Admins or Developers
Spinning Gears - Another component used to indicate that work is being done.
The best way to get started with working with LymeTemplate is to use the LymeTools Scaffolding App. Visit this page for instructions on getting LymeTools up and running.
Ideas for Upcoming Features
Messaging / Notification System - Based on SignalR and NGRX (I hate NGRX btw, so am open to alternative suggestions) for real time state management.
Winforms Supporting App - I know... WinForms... :-/
Upgrade Angular (currently only on v14)
Public User Registration / Multitenant Authentication Support
Support for file uploads.
Strategies on keeping scaffolded apps up to date with new features and bug fixes.
Alternate database support for cross-platform support.
SQLite support for basic low traffic web applications?
Support for other UI frameworks such as Bootstrap.
Conventions / Best Practices
ALL DATES ARE STORED IN UTC TIME. Any endpoints using DATETIME database values should be submitted using an HTTP POST endpoint because of how WebApi handles UTC time conversion. Get endpoints seem to pay attention to the server's local time relative to the client whereas
Most controllers use the generally accepted GET, POST, PUT, and DELETE convention, however I'm using a few other conventions as well. - An Entity Controller also use a "New" endpoint for creating new instances of objects. Newing it up from the server makes it easier to use the TypeScript interfaces generated from TypeLite as well as allow us to add business rules to new object instance from the API. I also commonly add a "Search" endpoint that will accept an object of search parameters that will return paged results back to the application, commonly for admin purposes.
An Entity Controller can also contain a Search endpoint which is an HTTP POST endpoint that accepts an object that specifies search criteria, filters or other options.
Models are stored in the Api.Models project. Domain models are at the root level and API-only models are in the API folder.
Keep as much business logic as you can IN THE API!!!
Challenges / Problems / Deficiencies
Keeping already scaffolded applications up to date with new features.
No Testing Frameworks are implemented.
Disclaimers
This is an early release... so, sorry. See the license document for more information.
The Future
Currently LymeTemplate is based on an Angular and .NET Core WebApi, but that can and probably will change or expand in Framework options in the future. Ideally, someday there would be a way to pick and choose what type of LymeTemplate you want to use.
For example, have the ability to have the same functionality available in any combination such as maybe using a React client using a Node-based API - the idea being that LymeTemplate in being a type of 'interface' for a standard boiler plate application...
...or it could just die. IDK.
Credits
Other scattered credits for smaller features in the code.