Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions _extensions/jmgirard/embedpdf/_extension.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
title: embedpdf
author: Jeffrey Girard
version: 0.5.0
quarto-required: ">=1.3.0"
contributes:
shortcodes:
- embedpdf.lua

106 changes: 106 additions & 0 deletions _extensions/jmgirard/embedpdf/embedpdf.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
-- simple HTML escaper for text nodes
local function html_escape(s)
s = tostring(s or "")
s = s:gsub("&", "&")
:gsub("<", "&lt;")
:gsub(">", "&gt;")
:gsub('"', "&quot;")
:gsub("'", "&#39;")
return s
end

function pdf(args, kwargs)
local data = pandoc.utils.stringify(args[1]) or pandoc.utils.stringify(kwargs['file'])
local width = pandoc.utils.stringify(kwargs['width'])
local height = pandoc.utils.stringify(kwargs['height'])
local border = pandoc.utils.stringify(kwargs['border'])
local class = pandoc.utils.stringify(kwargs['class'])
local button = pandoc.utils.stringify(kwargs['button'])
local image = pandoc.utils.stringify(kwargs['image'])
local image_force = pandoc.utils.stringify(kwargs['image_force'])
local image_width = pandoc.utils.stringify(kwargs['image_width'])
local image_height = pandoc.utils.stringify(kwargs['image_height'])
local image_border = pandoc.utils.stringify(kwargs['image_border'])
local image_class = pandoc.utils.stringify(kwargs['image_class'])

if width ~= '' then
width = ' width="' .. width .. '"'
end

if height ~= '' then
height = ' height="' .. height .. '"'
end

if border ~= '' then
border = ' border="' .. border .. '"'
end

if class ~= '' then
class = ' class="' .. class .. '"'
end

if image_width ~= '' then
image_width = ' width="' .. image_width .. '"'
end

if image_height ~= '' then
image_height = ' height="' .. image_height .. '"'
end

if image_border ~= '' then
image_border = ' border="' .. image_border .. '"'
end

if image_class ~= '' then
image_class = ' class="' .. image_class .. '"'
end

local button_html = ""
if button ~= '' then
button_html =
"<br><a href='" .. data .. "' download" ..
" style='display:inline-block; padding:10px 18px; background-color:#007acc; color:white; font-size:15px; border:none; border-radius:6px; cursor:pointer; text-decoration:none; transition:background-color 0.2s ease;'" ..
" onmouseover=\"this.style.backgroundColor='#005fa3';\"" ..
" onmouseout=\"this.style.backgroundColor='#007acc';\">" ..
html_escape(button) ..
"</a>"
end

if quarto.doc.isFormat("html:js") then
local html = ""

if image_force == 'TRUE' then
-- image only, linked to pdf
html = '<a href="' .. data .. '" download>' ..
'<img src="' .. image .. '"' .. image_width .. image_height .. image_class .. image_border .. ' />' ..
'</a>'
elseif image ~= '' then
-- pdf object with image fallback
html = '<object data="' .. data .. '" type="application/pdf"' .. width .. height .. class .. border .. '>' ..
'<a href="' .. data .. '" download>' ..
'<img src="' .. image .. '"' .. image_width .. image_height .. image_class .. image_border .. ' />' ..
'</a>' ..
'</object>'
else
-- pdf object with text fallback
html = '<object data="' .. data .. '" type="application/pdf"' .. width .. height .. class .. border .. '>' ..
'<a href="' .. data .. '" download>Download PDF file.</a>' ..
'</object>'
end

-- wrap main content + optional button
if button_html ~= "" then
html = "<div>" .. html .. button_html .. "</div>"
end

return pandoc.RawInline('html', html)
else
return pandoc.Null()
end
end


-- Add alias shortcode
function embedpdf(...)
return pdf(...)
end
2 changes: 2 additions & 0 deletions posts/2026-03-19-challenge-tracks.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ categories: [news]
toc: true
---

This post provides the challenge tracks for the 2026 Social Justice Hackathon. See also the [code of conduct](2026-03-26-code-of-conduct-judging-criteria.qmd) and [judging criteria](2026-03-26-judging-criteria.qmd).

This document introduces the three tracks that organize the work of the Philadelphia Social Justice Hackathon. Each track focuses on a different part of the justice system where technology, data, and design can make a meaningful difference. Together, they help guide team formation, shape the kinds of projects participants pursue, and clarify the goals of the event for students, community partners, mentors, and judges.

The three tracks---Rights Protection, Legal Empowerment, and Accountable Legal & Justice Systems---offer a framework for the weekend's work. They are meant to channel 36 hours of interdisciplinary collaboration toward ideas, tools, and approaches that respond to real challenges facing Philadelphia communities.
Expand Down
62 changes: 62 additions & 0 deletions posts/2026-03-26-code-of-conduct-judging-criteria.qmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
title: "SJHPHL 2026 - Code of Conduct"
author: "Hackathon Committee"
date: "2026-03-26"
categories: [news]
description: "Code of conduct for the 2026 Philadelphia Social Justice Hackathon."
toc: true
---

This post provides the code of conduct for the 2026 Social Justice Hackathon. See also the [challenge tracks](2026-03-19-challenge-tracks.qmd) and [judging criteria](2026-03-26-judging-criteria.qmd).

The organizers of the Philadelphia Social Justice Hackathon are committed to creating a safe and welcoming environment for all of its participants. We believe that everyone has the right to hack in a diverse and inclusive environment---free from discrimination or harassment. Creating and maintaining this environment throughout the Hackathon is a shared responsibility for the benefit of all, as we endeavor to collaborate with one another in pursuit of tech solutions that promote social justice within our Philadelphia community.

Our Code of Conduct outlines the standards of behavior that we expect participants of the Hackathon to abide by. All participants must follow these guidelines while participating in any aspect of the Hackathon. Importantly, this Code of Conduct applies equally to all members of the community, including attendees, participants, judges, sponsors, organizers, and volunteers, regardless of age, gender, race, ethnicity, nationality, sexual orientation, gender identity or expression, mental or physical disability, physical appearance, neurodiversity, religion, political affiliation, level of knowledge or experience, or any other attribute.

Please see the outlined standards below.

## Accessibility & Accommodation

The Hackathon is committed to accessibility and inclusion for its participants. Participants who may require accommodation are encouraged to contact the organizing team in advance so that we can work together to support your participation.

## Professionalism

We ask that all participants conduct themselves in a professional manner throughout the Hackathon. This includes treating other participants with respect, working cooperatively amongst your team, and refraining from otherwise discriminatory or harassing behavior.

## Respect for Others' Opinions and Abilities

The Hackathon is purposefully designed to bring together people with a wide range of opinions, skills, and experiences to collaborate toward our shared goal of promoting social justice via a tech solution. While we expect that participants may disagree, all disagreements must be expressed respectfully. Additionally, participants must educate each other respectfully. To this end, we request that participants not assume others' level of knowledge and not disparage a lack of information or insist on unnecessary precision.

## Responsible Data Handling

When developing their proposed solutions, participants must observe proper data-handling protocols, including appropriately classifying data as public or private, anonymizing private data, and ensuring that such data is not improperly disclosed, misused, or re-identified.

## User Privacy, Security, & Consent

The proposed solutions themselves must also handle data and anticipated data collection responsibly. This includes respecting privacy, ensuring security, and obtaining consent. Proposed solutions must not collect, store, or share personal information in ways that compromise safety, dignity, or rights.

## Anti-Discrimination

Discrimination in any form is not tolerated during the Hackathon. This includes discrimination in participation, collaboration, and evaluation. While the organizing team of the Hackathon will ensure that proposed solutions be judged fairly without discriminatory bias, we also ask that the proposed solutions themselves not:

- Discriminate against individuals or communities
- Enable profiling, targeting, or exclusion
- Promote harm toward marginalized groups
- Facilitate surveillance, criminalization, or oppressive systems
- Encode bias through data, design, or deployment

## Anti-Harassment

Harassment is any unwelcome or hostile behavior towards another person for any reason. This includes, but is not limited to, offensive verbal comments related to personal characteristics, sexual images or comments, deliberate intimidation, bullying, stalking, following, harassing photography or recording, sustained disruption of discussion or events, nonconsensual publication of private comments, inappropriate physical contact, or unwelcome sexual attention. Intent is not required for behavior to be considered harassment.

## Consequences for Discrimination & Harassment

Participants who engage in discriminatory or harassing behavior will be subject to action deemed appropriate by the organizing team of the Hackathon. Such actions include warnings or removal from the Hackathon entirely.

## Compliance with Legal Standards

Participants must agree to abide by all applicable local, state, national, and international laws, regulations, and standards throughout the Hackathon. The organizers reserve the right to review any projects developed during the Hackathon for compliance with such legal and ethical standards. In the event that concerns arise regarding the legality or ethical implications of any project, the organizers will initiate a dialogue with the participants involved in such. This conversation will aim to address the concerns raised and to provide participants with an opportunity to explain their project's intent, functionality, and potential impact. Depending on the outcome of this dialogue and the severity of concerns, the organizing team reserves the right to take reasonable and appropriate action on that project. This may include providing guidance to modify the project to ensure compliance with legal standards, requesting the cessation of work on the project, or, in extreme cases, disqualifying the project from the Hackathon. The organizing team is committed to handling all concerns regarding a project's legality with fairness and transparency.

## Reporting

We strongly encourage you to report any incidents of discrimination, harassment, or other violations of this Code of Conduct. If you experience or observe behavior that does not align with these standards, please contact an organizer directly through Signal or DevPost.
21 changes: 21 additions & 0 deletions posts/2026-03-26-judging-criteria.qmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
title: "SJHPHL 2026 - Judging Criteria"
author: "Hackathon Committee"
date: "2026-03-26"
categories: [news]
description: "Judging criteria for the 2026 Philadelphia Social Justice Hackathon."
toc: true
---

This post provides the judging criteria for the 2026 Social Justice Hackathon. See also the [challenge tracks](2026-03-19-challenge-tracks.qmd) and [code of conduct](2026-03-26-code-of-conduct-judging-criteria.qmd).

Projects are scored on a 1--5 scale across six categories:

| Category | 5 -- Excellent | 4 -- Very Good | 3 -- Good | 2 -- Limited | 1 -- Poor |
| --- | --- | --- | --- | --- | --- |
| **Innovation & Creativity** | Highly original; novel use of technology | Creative with unique elements | Some originality; common approach | Minimal originality; derivative | No clear innovation |
| **Impact & Community Relevance** | Deep understanding of community needs, significant impact potential | Addresses the problem(s) and impacts the community's needs in a meaningful way | Addresses the problem in an incomplete way; impact is limited or unclear | Weak relevance to community need, unclear impact | No clear problem, does not reflect the community's needs |
| **Design & User Experience** | Polished, intuitive, and accessible | Clear and usable design | Functional but unpolished | Confusing experience | Not usable |
| **Feasibility & Scalability** | Highly feasible and scalable | Feasible with minor limits | Feasible with challenges | Difficult to scale | Unrealistic |
| **Technical Execution & Interdisciplinary Development** | Fully functional; strong implementation | Mostly functional; minor issues | Partially functional; basic build | Major technical issues | Non-functional, has major bugs |
| **Equity & Ethical Consideration** | Demonstrates strong ethical awareness; implements concrete safeguards | Clearly identifies any major risks; proposes a realistic safeguard | Identified specific risks; limited or unclear mitigation steps | Basic ethical risks briefly recognized; discussion is incomplete | No clear consideration; sensitive harms, biases, or misuses are unaddressed |
Loading