{"id":20256221,"url":"https://github.com/devcybiko/hackrva-communications","last_synced_at":"2026-03-19T14:58:23.399Z","repository":{"id":99128090,"uuid":"557565939","full_name":"devcybiko/hackrva-communications","owner":"devcybiko","description":null,"archived":false,"fork":false,"pushed_at":"2024-04-21T23:09:22.000Z","size":4608,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-06T09:48:57.235Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devcybiko.png","metadata":{"files":{"readme":"README.md","changelog":"newsletter.json","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-25T23:07:17.000Z","updated_at":"2024-04-21T23:09:25.000Z","dependencies_parsed_at":"2024-04-22T00:27:51.603Z","dependency_job_id":"9f7081ab-cdc8-4d62-9036-e65fedafbfa1","html_url":"https://github.com/devcybiko/hackrva-communications","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/devcybiko/hackrva-communications","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devcybiko%2Fhackrva-communications","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devcybiko%2Fhackrva-communications/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devcybiko%2Fhackrva-communications/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devcybiko%2Fhackrva-communications/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devcybiko","download_url":"https://codeload.github.com/devcybiko/hackrva-communications/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devcybiko%2Fhackrva-communications/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30710514,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-19T05:29:31.190Z","status":"ssl_error","status_checked_at":"2026-03-19T05:28:25.821Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-14T10:45:54.010Z","updated_at":"2026-03-19T14:58:23.352Z","avatar_url":"https://github.com/devcybiko.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# hackrva-communications\n\nThis app creates a newsletter from the Meetup.com calendar.\n\nEvents are stored in the `./data/hackrva.sqlite` file.\n\n## Usage\n\n* edit the `newsletter.json` file to update the values month, welcomeImageURL, mindate, and maxdate\n```json \n    \"month\": \"December\",\n    \"welcomeImageURL\": \"december.png\",\n    \"mindate\": \"2022-12-01\",\n    \"maxdate\": \"2022-12-31\",\n```\n* ensure there is a file in `html/\u003cmonthname\u003e.png` for the banner\n* run: `./scripts/make-newsletter.sh \u003cmonthname\u003e`\n  * NOTE: the `monthname` is a double-check that you've updated the `newsletter.json` file\n\n## Results\n\n* The output HTML is in the `html/\u003cmonthname\u003e.html` folder\n* Upload both the html and png files to the HackRVA.org wiki \"Media\" area\n* Create a Post which points to the `\u003cmonthname`\u003e.html` URL in the \"Media\" area\n\n## EMAIL\nYou can get an abbreviated newsletter with ./scripts/make-email.sh\n\nSend to : HackRVA-Meetup-list@meetup.com\n\n## Design Notes\n\n### Getting the Meetup Events\n* `curl https://api.meetup.com/hackrva-meetup/events | jq \u003e events.json`\n* This command \n  * calls the Web Service routine from Meetup.com\n  * formats it with `jq` (which is optional)\n  * stores it in `events.json`\n* Meetup will send a year's worth of events that have not occurred in the past\n\n### Updating the database\n* `./js/update-database.js events.json`\n* This Command\n  * reads the `events.json`\n  * adds each record to the `data/hackrva.sqlite` flat-file database table\n* NOTE: It will overrite existing records with the same Meetup-event-id.\n* If you do this twice a month, all the old and new events will be stored\n* Meaning that updating the newsletter will work, and you can regenerate old newsletters\n\n### Extract the events from the local database\n* `./js/extract-events.js  \u003e monthly-json/$month.json`\n* This Command\n  * gets the `mindate` and `maxdate` from the `newsletter.json` file\n  * queries the `Event` table from `data/hackrva.sqlite`\n  * writes the event records to `monthly-json/$month.json` for the particular month\n\n### Merge the month's events into an HTML file\n* `./js/newsletter-merge.js monthly-json/$month.json \u003e html/$month.html`\n* This Command\n  * combines the parts of the HTML template from the `template/` folder\n  * replaces `{{fieldname}}` fields with values from each event in the `monthly-json/$month.json` file\n  * writes the output to the `html/$month.html`\n\n### Display the output in a browser for your inspection\n* `open html/$month.html`\n* This Command\n  * is Mac-specific\n  * You'll have to change it for other OSs\n  * Or just double-click on the resulting `html/$month.html` file\n\n## Folder Structure\n* data/ - holds the `sqlite3` database\n* html/*.html - the resultant monthly newsletters are stored here\n* html/*.png - the monthly 'header' .png files go here. YOU supply them.\n* js/ - javascript files\n  * models/ - table definition for the tables. (Event.js)\n* monthly-json/ - temporary storage for each month's events in JSON format\n* scripts/ - bash shell scripts\n* template/ - html fragments for the newsletter's HTML\n  * NOTE: the files are joined in alphabetical order\n  * NOTE: the `event-header.htm` and `event.htm` have `{{macro}}` fields that are expanded for each event\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevcybiko%2Fhackrva-communications","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevcybiko%2Fhackrva-communications","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevcybiko%2Fhackrva-communications/lists"}