From bd031d10b489f9ab2b02e725207cb7d58e3df642 Mon Sep 17 00:00:00 2001 From: Hyperling Date: Wed, 19 Aug 2026 13:27:45 -0700 Subject: [PATCH] Contnue additions to front end as well as to the overview section. --- Design.md | 73 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 56 insertions(+), 17 deletions(-) diff --git a/Design.md b/Design.md index 29f5a6f..ec97cb5 100644 --- a/Design.md +++ b/Design.md @@ -1,6 +1,6 @@ # Purpose -To allow users to enter up to 8 locations based on zip codes or lat/long and have the highs and lows display on a Celtic Wheel type layout based on the movement of the sun and seasons of the year. +To allow users to enter up to 8 locations and have the highs and lows display on a Celtic Wheel type layout in order to provide an easy at-a-glance evaluation of where to move during a weather focused nomadic cycle. | | SS | CQ | | | --- | --- | --- | --- | @@ -10,6 +10,8 @@ To allow users to enter up to 8 locations based on zip codes or lat/long and hav ## Explanation +The wheel is based on the movement of the sun and determines the seasons of the year. + SS = Summer Solstice, CQ = Cross Quarter, FE = Fall Equinox, @@ -26,6 +28,19 @@ The day is an estimate which typically actually spans between the 21st and 24th. Cross quarters are calculated to be `month = (3*X)-1`, `day = 1`. An example is Samhein which is typically November 1. +This document will refer to the 8 season segments as follows: + +| Season | Events | Dates | +| - | :---: | :--: | +| Spring1 | Spring Equinox to Spring Cross Quarter | March 21 - May 01 | +| Spring2 | Spring Cross Quarter to Summer Solstice | May 01 - June 21 | +| Summer1 | Summer Solstice to Summer Cross Quarter | June 21 - August 01 | +| Summer2 | Summer Cross Quarter to Summer Equinox | August 01 - September 21 | +| Fall1 | Fall Equinox to Fall Cross Quarter | September 21 - November 01 | +| Fall2 | Fall Cross Quarter to Winter Solstice | November 01 - December 21 | +| Winter1 | Winter Solstice to Winter Cross Quarter | December 21 - February 01 | +| Winter2 | Winter Cross Quarter to Spring Equinox | February 01 - March 21 | + # Components ## 1. Front End @@ -57,22 +72,32 @@ using Postman, testing the Weather Fetcher, etc. ### Pages +- App shall have a simple layout with all pages linked and visible from Main. +- Data entry may be done in a pop-up, modal, or subpage if necessary. + #### Main *Initial Versions - Simple Data Entry* --- -8 sections which contain (three?) data input fields: +8 sections which contain data input fields for: - Zip Code - Lat & Long (used to look up the zip, not sent to cache DB or weather service) - Nickname +Zip is a required field to successfully submit the data. Nickname is optional. +Lat and Long can be ignored and will be autopopulated on submit based on the Zip, +or if they are both populated and Zip is blank, then the submit function shall +calculate Zip based off of them. + *Formal Versions - Wheel Layout* --- +Includes and expands upon the previous section. + Circular layout representing the Celtic season wheel with 'LAST_UPDATE_DATE' in the center so the user knows when the highs and lows were last refreshed. @@ -84,11 +109,27 @@ one glow as it gets approached. So for June 21, Spring2 and Summer1 would both glow at 50% since that's the day they transition. Then by mid July it would only be Summer1 which glows, and at the end of July Summer1 would be dim and Summer2 would be glowing more. Maybe keep this in play after the hand works too. -- (TBD: If someone is in the southern hemisphere, how to know that and do the hand in a 180 degree from what it'd be up north? Maybe the location API can be used to know that based on the latitude being positive or negative if only a zip code is provided.) +- Hand and glowing need to be in the opposite direction if the user has more +than half of their latitudes as negatives. ##### Actions -- IF zip == "" && lat != "" && long != "" THEN zip = LOOKUP(lat, long); +- Location Submission {submitLocation(), onLocationSave()} + - `IF zip.isEmpty() && lat.isEmpty() && long.isEmpty() + THEN ERROR('Zip code must be provided! You may use lat/long to find it if needed.'); + FI` + - `IF zip.isEmpty() && (lat.isEmpty() || long.isEmpty()) + THEN ERROR('Coordinate data not filled out completely.'); + FI` + - `IF zip.isEmpty() && !lat.isEmpty() && !long.isEmpty() + THEN zip = LOOKUP(lat, long); + FI` + - If the user opts to provide a lat and long, find the zip code. + - `IF !zip.isEmpty() + THEN (lat, long) = LOOKUP(zip); + FI` + - This overwrites the user's lat and long for what is actually going to + checked by the weather API. #### Settings @@ -102,8 +143,8 @@ would be glowing more. Maybe keep this in play after the hand works too. - 'Week : Median / Center-Most' - 'Week : Mode / Most Common' - 'Only : Today' - - ?'Only : Tomorrow' - - ?'Only : Today + 7' + - 'Only : Tomorrow' + - 'Only : Extended (Today + 7)' - FALSE: - TextEdit: 'API Key' (REQUIRED) - 'If not using the cache server, you'll need to provide your own API key for TBD weather service.' @@ -113,20 +154,18 @@ would be glowing more. Maybe keep this in play after the hand works too. - Fahrenheit (^F) - Celsius (^C) - TextEdit: 'Preferred High' - - Radio Group: 'Relativity? (TBD)' - - Less Than - - Greater Than + - Whole Numbers / Integers Only + - Radio Group: '(TBD: Relativity?)' + - Option: 'Less Than' + - Option: 'Greater Than' - Checkbox: 'Equal To' - - TextEdit: 'referred Low' - - Radio Group: 'Relativity? (TBD)' - - Less Than - - Greater Than + - TextEdit: 'Preferred Low' + - Whole Numbers / Integers Only + - Radio Group: '(TBD: Relativity?)' + - Option: 'Less Than' + - Option: 'Greater Than' - Checkbox: 'Equal To' -### Description - -### Requirements - ## 2. Database ### Description