GithubHelp home page GithubHelp logo

bit-badger / prayertracker Goto Github PK

View Code? Open in Web Editor NEW
5.0 5.0 0.0 1.01 MB

A free prayer request tracking website

Home Page: https://prayer.bitbadger.solutions

License: MIT License

F# 94.77% CSS 2.61% JavaScript 2.33% Batchfile 0.01% Shell 0.02% Dockerfile 0.25%

prayertracker's People

Contributors

danieljsummers avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

prayertracker's Issues

Ensure login state preserved between SPA and web UIs

Make sure users can switch between UI experiences and have their login state preserved. Additionally, make sure "Log Off" in both UIs results in both detecting a non-authenticated experience, and that the "Remember Me" experience works in both.

Edge loses text

The current CKEditor instance and Microsoft Edge do not play well together. Check to see if there is an updated version that may work better. Also, determine if there is a good way to detect the failure rather than submitting an empty field, which causes the text to be lost.

Paginate request maintenance page and search results

Active small groups have well over a thousand requests; when the users review inactive requests, looking for one to update, the page is quite large. Provide a way to paginate results for the request maintenance page (only when inactive requests are shown) and the to-be-developed search page (#2). To do this:

  • Add a "page size" class preference, and default it to 100
  • Add this preference to the Class Preferences maintenance page
  • Modify the two affected pages to paginate based on this preference
  • Update the documentation to include an explanation of this setting

Do not show headings on empty tables

I recently added a new class, and noticed that the "Maintain Members" page showed a table heading even though it gave the message "No Entries to Display". Fix this, and check for other places where table headings may be displayed when a table isn't.

Add optional "as of" at the end of requests

Currently, there is no way to tell when a request was last updated except from the request maintenance page. Provide an option for small groups that will place (as of [date]) at the end of each request, and allow them to select between a long or short date format. It should default to "none", so groups will need to opt-in to see it.

Change authentication/authorization to JWT

The current authentication scheme in PrayerTracker uses ASP.NET Core authentication with cookies to determine the user's current privileges. Migrate this scheme to utilize JSON Web Tokens (JWTs), This will require:

  • Ensuring that the authentication and authorization (A&A) code that determines the "current small group" uses a claim obtained from a validated JWT for each request
  • Ensuring that the A&A code that determines the "current user" uses a claim from a validated JWT for each request
  • Ensuring that the JWT can be obtained from both the Authorization: Bearer and session cookie schemes

This will be targeted for the 7.4 release.

Add FAKE build script

FAKE v5 is very capable, and tooling understands it. Implement it to use for building, testing, and packaging the application. (It may also play more nicely with Appveyor...)

Move built-in help files to GitHub Pages

Currently, the online help is built into the program. This means that any changes to the documentation end up causing the system to change, when it should be able to be changed independently.

  • Extract the documentation from the Giraffe views (en) and RESX files (es), and create a structure under /docs to utilize GitHub Pages' ability to rebuild at will.
  • Modify PrayerTracker to generate links to this site
  • Create sites for /en and /es, and ensure that the link PrayerTracker shows take the currently selected language into account (i.e., show Spanish help for Spanish users, English help for English users)

Refresh color scheme

PrayerTracker has had its current color scheme for many years. Investigate shades of blue to augment the grays it currently uses, and run an accessibility audit on the result to ensure contrast is appropriate.

Move current UI to /web

The intent for PrayerTracker v8 is to have the SPA version be the default, but still provide the current UI under the /web subdirectory. For this issue, migrate all current pages to utilize this structure, including a temporary redirect from / to /web/.

This will be part of the 7.4 interim release.

Create Vue UI and API

Create the Vue UI that will become part of the PrayerTracker v8 release. Also, create the API required to obtain and update data using this UI. This includes creating a way to authenticate via API and receive a JSON Web Token (JWT), and providing that JWT with each request, so that the user's current small group and user IDs can be utilized to record these actions.

Update outbound e-mail address

Change the domain of the outbound e-mail address from djs-consulting.com to bitbadger.solutions, so it can go through Exchange Online Protection for that domain.

Expired requests do not match

There seems to be a difference between requests that show when only active requests are shown, and those shows when inactive requests are included. Either the former is dropping requests, or the latter is not properly identifying expired requests. Ensure that both these tests are using dates only, and not including times in the comparison; I suspect this may be the issue, but I'm not sure which part has it.

Update to .NET 5

.NET 5 was released earlier this week, and brings significant performance benefits. Update this to run in that environment.

Update to .NET 6

.NET 5 is not a long-term-support version, but .NET 6 is. Modify this application to run on .NET 6.

Site-wide announcements cannot be sent

The query that gets all users as members uses a technique that EF Core does not support. Modify this query to use the existing "all users" query, then map the results to members.

Auto-expired requests falling off a day early

This looks very similar to #17, but in the opposite direction. That issue made the items compare on dates, and the net effect was that the day a request is entered should be 0-day; a request entered on one Sunday (the 1st), with expiration at 14 days, should still be on the list 2 weeks from that day (both the 8th and 15th), but fall off the following Monday (the 16th).

Make the query and the "am I expired?" code match this behavior.

Use htmx for front end

htmx allows responsive web front ends to be built without the complexity of a typical Single Page Application (SPA). Use it for the user interface for version 8.

Review documentation for v8

There are a few minor tweaks in version 8; review the help and make updates as necessary. Also, port the style from #38 to the help site.

Use claims for authorization

The current version of PrayerTracker uses custom code and 3 different cookies to maintain user/group log on state and rolling session activity. Convert this structure to use ASP.NET Core's ClaimsIdentity with its standard "logged on" cookie; this handles "remember me" and rolling sessions automatically.

Move date/time handling to NodaTime

v7 already uses NodaTime to convert dates/times from UTC to the small group's local time. When upgrade to v8, we ran into an issue that was exposed by a new version of Npgsql. In researching the text around this, rather than go through and put DateTimeKind on all the various dates and times, convert these to use NodaTime constructs.

This affects prayer request entered and updated dates, as well as user last seen date/times. Ensure that queries for "current" and "expired" requests take the small group's time zone into account when they query this data.

(This is probably the root of the #22, which itself arose from #17... These implicit conversions have been "bug"ging this project for years.)

Change pre-email warning to "group" instead of "class"

This message is a hold-over from when "small groups" were called "classes". The actual message says "This will e-mail the current list to every member of your class, without further prompting." Change this to "group".

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.