cmiles - info

Life, Tech and Unimportant Minutiae

Final Summit Hut Codebase README.md - 5/9/2026

Created and Updated by Charles on 5/9/2026.

2026 April After Image
2026 April After Image: My home for 23 years - when I started the 2nd store was on Wetmore, hadn't opened that long ago and shared an entrance with Full Cycle - in the 2010s the 2nd store moved north to Oro Valley. So many good years, so many great people and so many happy memories - now just an after image of the sign and some empty fixtures. Charles Miles. 4/6/2026.

I worked on the Summit Hut codebase in some way for about 2 decades before the Summit Hut went out of business in 2025. In the last few years of the business I was the only developer left working on the code. Without the Summit Hut the code itself doesn't have much meaning or value - but one artifact that seems worth preserving as a piece of nostalgia and personal history (and probably amusement/interest for the technologies and details mentioned) here is the final version of my Summit Hut README.md - it was last updated 2/8/2025. I fixed a couple of typos and moved the the 'Thank You' section to the top (in some ways this is the most interesting section and doesn't deserved to be buried at the bottom), otherwise this is a frozen in time version that stands as a reminder of some wonderful times and people!


Thank You!!

If you have made it this far in the ReadMe I owe you a sincere in person Thank You - let's go for a hike!!!

I can't currently tell you how far custom Summit Hut code goes back - but I've seen pictures of Dave Baker with big floppy disks which should give you an idea! By the time I came to the Summit Hut in the early 2000s Dave and Mitch already had a full system written in Delphi that ran the Summit Hut (with earlier software written by Dave Baker and Jim Harsha) - some of which is still running as I write this.

I didn't start on the Dev team and got to watch from the outside as Dave, Mitch and Aaron put us on the path to the .NET Framework and C# in the early 2000s. Major applications from that era included a new Asp.net version of the Summit Hut website (Aaron and Mitch), Web Product Manager (Aaron), GLS (Dave) and Order Manager (Mitch). As you might imagine anyone involved - both users and devs - celebrated some awesome wins and some disappointing failures. In general the current Summit Hut software owes quite a debt to the decision to choose C# and .NET which has allowed our software to continue to evolve!

My first code for the Summit Hut was in VBA - Excel code that created improved Restock Sheets, helped with balances and analyzed sales. Thanks to help from Aaron this code was re-written several times to be better and better and then the spirit of that code made the transition to .NET and ETL style reporting apps. I updated a local reporting db monthly before I had permission to code directly against the database and eventually jumped on the .NET 3 WPF Betas to code what would become Inventory Display and a number of the apps we use today.

While a lot of my learning was done from books, reading, podcasts (.NET Rocks!) and classes it is with deep appreciation that I look back on the incredible inspiration I took from Dave Baker's IMS (and his general approach to understanding and improving the business thru information/reporting and constantly improvement), Aaron Wagner's Web Product Manager and IMS Quick Search (and his deep focus on the users - can't say enough about his incredible help in my early programming endeavors) and Mitch Baker's focus on business value (and his IT setup that continues to serve us well!).

If you talk to me in person I can tell you about all the things I lament about the current state of our code and code base - there will probably always be things to lament with over 20 years of history to reckon with and real world business concerns and constraints involved - and I could write about missed opportunities, mistakes, disagreements, mis-steps and current pain points - all visible in (or between the lines of!) the code I suppose - but more importantly I can tell you a lot about all the great business, good decisions, best efforts and care that went into this code!

It is worth understanding that this code represents many days (and nights!) of great coders doing the best they could for the Summit Hut - on some days it was business, a job and a paycheck and that was the best we could do, but on most days we created code with love, craftmanship and respect for all the amazing people at the Summit Hut. The people at the Summit Hut have always been the highlight, both those who work here now and the many that have passed thru, and some away, over the years... I am proud of the people and jobs that this software has allowed the Summit Hut to support! Sorry for the Problems, Warm Regards and Honest Best Wishes - Charles Miles, 12/5/2021, last update 2/8/2025


ShOne

Welcome to the main repo for 'modern' Summit Hut code!

Much of what you should need for day to day operations is in GitHub, and a large portion of it is in this repo. But we have long tail of legacy software so see GitHub and explore - be careful of historic/archived repos and don't miss ShTimeCapsule for deep historic exploration. Also for true legacy software we should have some on-disk-only historic data that you can ask for access to (likely including the Delphi code/dev environment and Mitch's last SVN repo, including build directories, before that repo died/was shut down).

If you are new to this repo or moving dev machines PLEASE see the Getting Started section below - it tries to list everything you need installed, my experience from setting up new dev machines for myself is that skipping any of this will likely just mean coming back to it later...

Main Ideas:

The core of these were written many years ago, benefitted from many years of work/thought/dev at the Summit Hut and continue to be very relevant! Based on actual real world experiences and outcomes these are not set in stone - this is not a manifesto - but they are a solid place to improve from!

Of course all that said the real interesting parts are always the grey areas - here are other current repos NOT combined into this solution - and some reasons they are stand seperate:

Style:

Getting Started

You will need:

LastPass: In general I have tried to get most of the documentation into the git repos but in some cases (say re-authorizing with Amazon) where 'admin' level credentials are needed there may be documentation in a LastPass entry.

You may want to have the IT-Documentation-Summit-Hut GitHub repo available - without a 'standard' DevOps setup to work with it is inevitable that you will need to understand some of the Summit Hut network to deploy/troubleshoot/understand/work with our system. A domain account goes a log way towards being able to explore some of the internal network - but you might also need to work on various admin access issues and potentially access to at least a subset of our Last Pass setup may be useful.

GUI App installers are signed - this might be considered optional in our current environment and probably could be skipped but currently from a computer on the domain:

Very Strongly Suggest:

Likely Useful and/or Currently Often Used:

YMMV:

Once everything is installed on the commandline run:

1ShConfig.xml - Most - BUT NOT ALL - programs in this repo use 1ShConfig for connection strings and a number of settings that you will want for develepment use. Please take time to read about the file and options in the LogAndMail ReadMe - this will save you some time figuring out where settings come from and easy ways to override them for development.

Dev Environment Tooling - Summit-Hut/DevEnvironmentHelpers - this can make your life a little easier - see the docs there, a few quick notes:

Some very random troubleshooting notes:

Tech, the Future, Musings

Our current stack is a fragmented blend of WPF, Winforms, Console Apps, WCF, dynamic SQL, EF, etc... When possible:

Environment Expectations:

Creating/maintaining/re-building the Summit Hut Network is beyond the scope of this document and the Summit Hut code is built expecting this environment (there is some flexibility but Summit Hut code has NOT been written with moving it to a completely new/different environment as a primary consideration!). But to help developers remember and recognize some key details a few notes are presented here:

Project Overview Notes:

Amazon/02

Amazon is slowing shutting down MWS access in favor of the Selling Partner APIs - newer code is in the 02 folder. Code to push items and stock to Amazon and get orders and reports from Amazon. Console apps for different functions are published as exes, pushed to the Task Server and run with Task Scheduler.

Apps

WPF GUI Apps live here. Recent GUI apps have all been done in WPF with older apps primarily in WinForms (of Delphi for the oldest apps). A huge part of the functionality of these apps is in the WpfParts Library.

ATS

ATS console apps to pull vendor stock into our system for various vendors. Vendor Stock can be used both for Drop Ships and for buying reference. Console apps for different vendors are published as exes, pushed to the Task Server and run with Task Scheduler.

B2B

Largely legacy code but still used primarily in the exchange of B2B POs with several vendors. There is a fascinating history here dating back to Dave and Mitch's involvment in pioneering a free XML based data exchange specification more modern and more free than EDI solutions.

Business Objects

In the mid-2000s long before C# and .NET had anything like a 'standard' data access story Dave Baker wrote a generator to create a data layer with features that he used in GLS. The generation isn't currently supported and this library is currently frozen - but fairly straightforward code means it has come forward into .NET Core.

CheckCleanWarnRunner

A long lived program to run a wide variety of tasks - some general users will call many of the generated emails 'bot' emails and know the program that way - but there are many things here related especially to reporting, checking the database, cleaning up and warning about possible problems

Classic Apps

A bit of a catchall for older apps that are still in use...

Classic Data, UI, Utils

Largely authored by Aaron Jones starting in what was probably the Framework 2.0 era for WPM, an early ASP.net version of Summit Hut and for other apps as well. Even today it has useful functionality but is only kept as a legacy library - code should be updated away from these libraries with the idea one day this goes away.

Clipboard

Support for data to the clipboard (and to help with Drag and Drop to some extent) for GUI Apps

EmailCrm

A system for sending emails from the Summit Hut about orders. This was our primary email system on the old Summit Hut Asp site - now it serves a small number of orders and supports Gift Cards with the majority of emails coming from Magento.

EPPlus

In early 2020 EPPlus released their last 'free' version. EPPlus is a great Excel library and best wishes to them - well worth being a paid project - but EPPlus is a legacy library in this code base with all recent effort going into using ClosedXML - with that in mind a local copy of the last free version is included in the project.

ExcelInterop

Used both for reading from the open application and for writing to Excel in older reporting. For writing to Excel try to use ClosedXML rather than Interop.

GeneralData

Some code here dates all the way back to Linq2Sql and this library has evolved thru time - not all code or approaches are ideal but try to reuse this data layer and when you find problems try to refactor this to make all of the code better. Also a number of services are listed in this repo.

Generated Service References

Contains the generated WCF Service References and some help generating them. This is located in the project but is not in the VS solution.

ItemSearch

Dating back to an origin in Microsoft's late 2000s 'Oslo" effort with MGrammar, MSchema, MGraph and design surface called Quadrant this currently uses a parser called Irony to turn a text item search language into an item search. The success here has been that over the years this has facilitated a number of user searches that are powerful and sometimes slightly free form without allowing/needing the user to understand SQL.

LogAndMail

Common Seq logging setup, basic email functionality and general SH Configuration - try to use this rather than something custom.

M2

Originally written by Mitch Baker starting in 2020 this took his experience with sync to our first Magento site and improved it for our V2 Magento Site. In recent years the code has been migrated to .NET Core and integrated with other projects. This does all things sync with Magento - Inventory, Items, Images, Products...

OrderAutoReceiver

Not quite fitting into other buckets the OrderAutoReceiver has an important function making Drop Ship orders work correct in our system. Originally a service but now deployed to the Task Server.

OrderIntegration

OrderStateUpdate has a number of functions that help the flow of web orders by looking at the state and making changes and updates. The ShipStation integration pulls some shipping information from ShipStation (primarily used for Amazon).

Printing

PO, Tag and Talker output - the PO output is for Excel - Tags and Talkers abstract away dealing with the ZPL used to produce these items.

ReportDates

A library to abstract reporting periods and to help with the construction of more complex sets of periods both in code but also thru somewhat natural language text snippets - '-21d to t', 'March', '2010' are supported along with options for 'x periods back' and previous years (both by date and by day). This library might not be what/how I would write it today but it has stood the test of time and provided awesome flexibility for power users and has some nice code shortcuts.

ReportEngine

An older reporting engine used by some of Dave Baker's code. Legacy, refactor away from this as possible.

Reports

Both an older mostly Excel Interop based reporting and a newer effort both in Excel via ClosedXML and thru writing static/self contained HTML Files. Try to only use ReportsTwo going forward.

Scanner

A well tested library for getting intput from USB HID Scanners - in the future it might be an advantage to use the POS HID libraries that allow more formal capture and communication with the scanners - but this library, for it's intended uses, has been very well tested at this point.

Transaction Processing

Written originally for the ASP.net site (that followed the old Homesite site!) written by Mitch and Aaron this helps with Transaction processing and is still used for Order Manager and some other apps.

WpfParts

The Apps folder (above) derives quite a decent amount of functionality from the WPF components shared in this folder - the idea here is to write windows/controls here and be able to reuse them across applications.


Tags:
Posts Before: