A3EA
(Andy's) Ann Arbor Event Aggregator
Nerding out!
(I thought some of you might like this kind of stuff) any questions? Just ask
Here I will go into the specifics about how the website works and the technologies that were used.
--Functionality--
For you guys, The 'Home' front end allows anyone to view events and filter them by date, category, and keywords.
Site also has lots of little information pages (like this one (meta)) with more information about the site and whatnot.
If logged in, you can access the advanced search, to search on category, datasoure, price, or even use keyword formulas for advanced event filtering.
If logged in, you can access the account section which will allow (some day, not yet) managing your account and configuring event notifications and things like this
For me, the admin section has a number of pages to help administer the site, including,
A page to quickly monitor all the data scrapers to make sure they are working, and to drill into any issues quickly.
A page to add page notification to the top of the wesite for critical updates and messages like that.
A page to edit, exclude, or feature(maybe?) events. (Work in progress, not completly built yet)
------TECH STUFF------
--WEB Front End---
This frontend application is built using a combination of modern web technologies and frameworks,
primarily ASP.NET Core for server-side rendering and client-side interactivity.
The front end of this application was written using Visual Studio, C#, and NET 8.0.
It uses the MVC design pattern.
Hosted in the cloud using AWS.
The web application is containerized using Docker and deployed to AWS ECS Fargate.
Simple and clean front end written with Razor, HTML, CSS, and JavaScript and bit of Jquery and Bootstrap here and there.
Hosted both http and https but http redirects to https, and system uses https terminiation at loadbalancer level.
Dependency Injection passes in required services depending on context.
Both local user session and server side shared memory caching is used to optimize performance.
Notifications set up with AWS SMS/SES
User Management in Aws Cognito, allows signing up for accounts, verifying emails/phone, pw resets, group based Authorization.
Admin section contains debugging and configuration tools.
--Cookies--
This site uses stores these cookies on your system for basic website functionality.
-It uses a cookie to store if the user agreed to the cookie policy (lol).
-It uses a cookie to remember when the user closes a page notification. So it does not continue to show after the user closes it.
-If logged in, It uses a cookie to store the authentication data, so it isnt requred to re-login on every page load,
and so that it expires and they automatically logs out after being idle for a while.
--Middle Tier--
Behind the scenes, there are a number of AWS Lambda functions that run on specific schedules.
They each go out to the web and scrape data from a single source, putting the data into the system.
Each scraper is custom written depending on the data source.
typically driven with custom code, regular expressions,
and will occasionally be leveraging AI as a redundant layer for robustness/consistancy,
used to sometimes retry failed scrapes/parsing or used in problematic sections with inconsistant data formats.
--Back End--
The database used is MongoDB's DocumentDB, hosted in AWS.
The data from the scrapers, configurations, anything non-sensitive is stored there.
Anything sensitive is encrypted and contained in the AWS Parameter store. I chose that over AWS Secrets Manager for cost reasons.
I chose DocumentDB for simplicity and learning reasons, as I wanted to try using a serverless non-relational database.
The data is stored in documents, and each document represents a single day, containing all the events for that day.
This will make it fast to pull up all events by day, but may pose some problems later for searching.
I may change this later.
AWS handles many things,
hosting/backups/logging/redundancy/analyitics/budgeting/cost management/
Amazon Route 53 to register and setup the 'A2EA/A3EA' domain names,
Application Load Balancer to handle uptime/redundancy over availability zones and http/https routing
Amazon CloudWatch to monitor and log everything
Parameter store for confirmation values
Aws Cognito for user management.
Amazon SES to register A2ea email addresses