Pointless Waymarks CMS is a Windows Desktop program that creates static websites in the style of Pointless Waymarks, cmiles - info and this site. It is not an 'all purpose' web site creation solution - instead it focuses on:
- Locally Generated Static Sites - low cost, low maintenance, high durability, easy backup, doesn't have to be on the web to be useful.
- Simple Functional Presentation with a Focus on Content
Pointless Waymarks CMS Installer Downloads
Pointless Waymarks CMS Site Viewer Downloads
Features
Content Lists
The first tab in the application is an All Content list. Like all of the lists you can sort and filter to find content and use commands from the menu bar, context menu and quick action buttons to edit, update and create content. The default sorting puts the most recently updated/created items at the top which often means this list is all you need to work efficiently. All lists update automatically in the background to reflect the latest changes.
Each Content Type also has a dedicated list that allows access to content-specific commands not available in the All Content list. Content lists start by loading a limited number of recent entries - this allows even very large lists to load quickly with the content that you are most likely to be actively working on. Loading the full list is a single button click.
The ability to export to Excel, edit, and import the changes back into the Pointless Waymarks CMS is provided for all content types and most fields. Many updates are more easily made inside the program but Excel provides a powerful interface for complicated/bulk edits.
Photographs are a central content type and there is support for reading information from the photo's metadata. This often allows the painless import of large batches of photographs with minimal clean up afterwards.
The Photo List supports searching for field like focal length and iso in addition to standard search fields like titles and tag. Photo items have buttons to quickly find similar photos based on details such as Camera Make, Lens, Aperture, Shutter Speed, etc. The Reports menu allows you to quickly find potential problems such as 'No Tags' or 'Blank License' and has an option to export all of a photo's raw metadata to an html file.
A list view of content that has spatial information alonside a map is also available.
Content Editors
The content editors are intended to be simple, helpful and functional. Change and validation indicators, previews and help with common editing actions are provided. Spatial types - Points, Lines and GeoJson have Leaflet based previews.
Tags
Tags are a primary way of connecting and organizing content - a Tag Editor, along with Excel Export/Import, provide support for organizing/correcting/updating tags.
This software has no support for storing completely private content - but it does have support for excluding Tags from the site's various search pages and indicating to search engines not to index excluded Tag Pages. This can be a good way of providing some 'modesty' for tags that you might not want to delete - but that you also don't want to be prominent.
Menu Links
Content is the focus of this project and admin/widget/header/menu options are intentionally minimal. One of the few options is to use the Menu Links editor to create a very simple menu for the site.
File Change Tracking
Deploying the site is simply a matter of syncing the content from the generated local site to its destination. To help with that process the program tracks written files and has options to export a list of files, create very basic S3 cli scripts or use the built in S3 uploader. There is also support to detect changed and no longer needed files on S3.
Feature Intersection Tagging for types with Spatial Data
With some setup involving downloading/creating GeoJson files and putting together a settings file you can tag lines, points and photos with values from GeoJson reference data. This is done by checking for intersections between your downloaded/created reference data and the spatial data from your content - you can specify what property is used to create a Tag.
This certainly doesn't replace tagging 'by hand', but having details like National Forests, National Parks, State Line, National Monuments, State, County, etc. consistently and automatically tagged can be an advantage in organizing your content. In the screen shot below all of the tags were generated by the Feature Intersection Tags feature and data including PAD-US from the U.S. Geological Survey.
See the Feature Intersection Tags documentation for details.
(Local, Offline) Site Viewer
A viewer for the on-disk version of the site is available both in the editor and as a stand alone program. This makes it possible to browse your local site without configuring a local web server or publishing your changes. Links to the site are opened in the viewer - external links are opened in your default browser.
One important reason that a local viewer is included is that not all content needs to be online!
Tasks
Part of the project are a number of 'Tasks' - these are Console Applications that provide extra functionality and are intended to be run thru the Windows Task Scheduler.
- Pointless Waymarks CMS Task - Memories Email
- Pointless Waymarks CMS Task - Photo Pickup
- Pointless Waymarks CMS Task - Garmin Connect Download
- Pointless Waymarks CMS Task - Publish Site
Password Protected Sites via Cloudflare Workers
Not currently incorporated into the program in any way, but included in this repo, is a simple Cloudflare Worker script for Basic Auth (I have used this successfully for over a year but Cloudflare Workers aren't my current passion so use with caution...). This provides a very simple zero cost (Cloudflare Workers are available on their free plan) way to password protect a site. There is no sense of 'user accounts' or options to change/recover passwords so this is only relevant in limited scenarios, but I have found this to be a nice way to put content online for myself, friends and family without making it public.
Tools and Libraries
I am incredibly grateful to the all the people and projects that make it possible to rapidly build useful, open, low/no-cost software. Below is a mostly-up-to-date-and-largely-comprehensive list of tools/packages/libraries/etc. that are used to build the this project:
Tools:
- Visual Studio IDE, .NET Core (Linux, macOS, and Windows)
- ReSharper: The Visual Studio Extension for .NET Developers by JetBrains
- GitHub Copilot · Your AI pair programmer · GitHub
- Metalama: A Framework for Clean & Concise Code in C#
- Xavalon/XamlStyler: Visual Studio extension to help format your XAML source code
- PowerShell
- tareqimbasher/NetPad: A cross-platform C# editor and playground.
- dotnet-script/dotnet-script: Run C# scripts from the .NET CLI.
- AutoHotkey
- Beyond Compare
- Compact-Log-Format-Viewer: A cross platform tool to read & query JSON aka CLEF log files created by Serilog
- DB Browser for SQLite
- ExifTool by Phil Harvey and Oliver Betz | ExifTool Windows installer and portable package
- Fork - a fast and friendly git client for Mac and Windows
- grepWin: A powerful and fast search tool using regular expressions
- Inno Setup
- Greenfish Icon Editor Pro
- Notepad++
- RegexBuddy: Learn, Create, Understand, Test, Use and Save Regular Expression
Data:
- dotnet/efcore: EF Core is a modern object-database mapper for .NET. It supports LINQ queries, change tracking, updates, and schema migrations.
- SQLite - An absolutely brilliant project - having a Public Domain option for such a high quality data store that can be used locally and cross platform is amazing! Public Domain.
- fluentmigrator/fluentmigrator: Fluent migrations framework for .NET - documentation](https://fluentmigrator.github.io/)
General:
- commandlineparser/commandline: The best C# command line parser that brings standardized *nix getopt style, for .NET. Includes F# support - MIT License.
- CompareNETObjects - Comparison of object properties that stays quick/easy to use but has more options than you would be likely to create with custom reflection code - and potentially more durability than hand coded comparisons. Ms-PL License.
- HangfireIO/Cronos: A fully-featured .NET library for working with Cron expressions. Built with time zones in mind and intuitively handles daylight saving time transitions. MIT License.
- bradymholt/cron-expression-descriptor: A .NET library that converts cron expressions into human readable descriptions.. MIT License.
- ButchersBoy/Dragablz: Dragable and tearable tab control for WPF - MIT License.
- fluentscheduler/FluentScheduler: Automated job scheduler with fluent interface for the .NET platform. - New BSD License.
- GitHub - danm-de/Fractions: A fraction data type to calculate with rational numbers. - Used in the Shutter Speed Content List Search - this makes dealing with fractions quite easy! Copyright (c) 2013-2017, Daniel Mueller [email protected]. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- IdentityModel/IdentityModel: .NET standard helper library for claims-based identity, OAuth 2.0 and OpenID Connect. - Apache 2.0 License.
- rickyah/ini-parser: Read/Write an INI file the easy way! - the ease of working with json makes it quite attractive but it is not as easy to edit by hand as an .ini file imho. MIT License.
- PowerShell/PowerShell: PowerShell for every system! - MIT License.
- Microsoft.Recognizers.Text provides recognition and resolution of numbers, units, and date/time expressed in multiple languages - An impressive Date and Time parsing library - the output is detailed and uses generic string/object data types (rather than custom .NET types) so takes some work to parse, but the excellent results and ability to easily recognize when the user has only input a date, or only a time, or both, or a range... is powerful. MIT License.
- shrayasr/pinboard.net - Easy to use wrapper for Pinboard - 'Social Bookmarking for Introverts'. MIT License.
- bcwood/PressSharper: A C# class library for parsing WordPress XML export data. - the code from PressSharper was pulled into this project, updated for .net5.0, and lightly refactored and reformatted. PressSharper was forked from forked from dreadwail/press_sharp: A C# class library for parsing Wordpress XML export data.. MIT License.
- omuleanu/ValueInjecter: convention based mapper - Quick mapping between objects without any setup needed. MIT License.
Images:
- mono/taglib-sharp: Library for reading and writing metadata in media files - for reading tags this application uses other libraries - but TagLib# is notable for also writing metadata. LGPL-2.1 license.
- GitHub - dimsemenov/PhotoSwipe: JavaScript image gallery for mobile and desktop, modular, framework independent - PhotoSwipe Examples and Documentation. MIT License.
- Raleway - Google Fonts
- drewnoakes/xmp-core-dotnet: .NET library for working with the Extensible Metadata Platform (XMP) - The goto C# library if you want to read/write XMP files.
- GitHub - miromannino/Justified-Gallery: Javascript library to help creating high quality justified galleries of images.. MIT License.
- sungaila/PDFtoImage: A .NET library to render PDF files into images. - Uses the pdfium and SkiaSharp to render PDFs to images. MIT License.
Wpf:
- dfinke/PowerShellConsole: Create a PowerShell Console using the AvalonEdit control - Used code from this project to create an AvalonEdit based PowerShell control for the PowerShell Script Runner Project. Apache License 2.0.
- icsharpcode/AvalonEdit: The WPF-based text editor component used in SharpDevelop - A long lived, powerful, text editor for WPF. MIT license.
- dotnet/DataGridExtensions: Modular extensions for the WPF DataGrid control - Easy way to add simple filtering and other features especially to an existing DataGrid. MIT License.
- mmanela/diffplex: DiffPlex is Netstandard 1.0+ C# library to generate textual diffs. - Includes a WPF control to display diffs. Apache-2.0 license.
- Dirkster99/NumericUpDownLib: Implements numeric up down WPF controls - These up/down controls are missing from WPF - nice to find an updated open source library that provides these! MIT License.
- anakic/Jot: Jot is a library for persisting and applying .NET application state. - Used to save application state most prominently main window position.
- Kinnara/ModernWpf: Modern styles and controls for your WPF applications - MIT License.
Html:
- chartjs/Chart.js: Simple HTML5 Charts using the canvas tag
- arminreiter/FeedReader: C# RSS and ATOM Feed reader library. Supports RSS 0.91, 0.92, 1.0, 2.0 and ATOM. Tested with multiple languages and feeds.
- AngleSharp - Home - AngleSharp/AngleSharp: The ultimate angle brackets parser library parsing HTML5, MathML, SVG and CSS to construct a DOM based on the official W3C specifications. - Mainly used for parsing web pages when creating links. MIT License.
- zzzprojects/html-agility-pack: Html Agility Pack (HAP) is a free and open-source HTML parser written in C# to read/write DOM and supports plain XPATH or XSLT. It is a .NET code library that allows you to parse "out of the web" HTML files. - Used in the Memories email program to parse html. MIT License.
- shps951023/HtmlTableHelper: Mini C# IEnumerable object to HTML Table String Library - used for quick reporting output like the Photo Metadata Dump. MIT License.
- HtmlTags/htmltags: Simple object model for generating HTML - Currently this project uses a combination of T4 templates and tags built by this library to produce HTML. Apache License, Version 2.0.
- microsoft/playwright-dotnet: .NET version of the Playwright testing and automation library. - MIT License.
- SebastianStehle/mjml-net - An unofficial port of Mailjet Markup Language for .NET - this is a good way to ease the pain of building HTML for email. MIT License.
Testing:
- GitHub - adobe/S3Mock: A simple mock implementation of the AWS S3 API startable as Docker image, TestContainer, JUnit 4 rule, JUnit Jupiter extension or TestNG listener - One docker command to have a mock S3 server running and minimal configuration needed for simple cases!!! Apache License, Version 2.0.
- nunit/nunit: NUnit Framework - MIT License.