diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index b1eeb159..5022f5e1 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -9,9 +9,9 @@ jobs: if: github.event_name == 'pull_request' || github.repository == 'harvard-lil/website-static' steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: bundle key: ${{ runner.os }}-gems-${{ hashFiles('app/Gemfile.lock') }} @@ -30,20 +30,22 @@ jobs: sudo mkdir -m 777 build ls bundle || sudo mkdir -m 777 bundle sudo mkdir -m 777 app/.jekyll-cache + docker compose run jekyll npm install - name: Test run: | bash ./scripts/run-tests.sh - - name: Deploy - if: github.event_name == 'push' && github.ref == 'refs/heads/develop' + - name: Deploy to stage + if: github.event_name == 'push' && github.ref == 'refs/heads/redesign' env: DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }} - DEPLOY_URL: ${{ secrets.DEPLOY_URL }} + DEPLOY_URL: ${{ secrets.STAGE_DEPLOY_URL }} DEPLOY_HEADER: ${{ secrets.DEPLOY_HEADER }} + LIVE_SITE: ${{ secrets.LIVE_SITE }} run: | set -x - CSS_BUST=$(find build/assets/css -type f -exec bash -c 'if [[ `diff {} <(curl -s "https://lil.law.harvard.edu/$(echo "{}" | cut -c 7-)")` ]]; then echo "bust ({})"; fi' \;) + CSS_BUST=$(find build/assets/css -type f -exec bash -c 'if [[ `diff {} <(curl -s "https://$LIVE_SITE/$(echo "{}" | cut -c 7-)")` ]]; then echo "bust ({})"; fi' \;) if [[ $CSS_BUST ]] ; then COUNTER=`grep cache-buster app/_layouts/default.html | sed -r 's/.*cache-buster=([0-9]+).*/\1/'` let NEWCOUNTER=$COUNTER+1 @@ -53,8 +55,20 @@ jobs: git config user.name "GitHub Actions" git add app/_layouts/default.html app/_includes/custom-css.html git commit -m 'Increment CSS cache-buster [skip ci]' - git push origin develop || exit 1 + git push origin redesign || exit 1 fi export DEPLOY_CONTENT='{"GITHUB_RUN_NUMBER":"'$GITHUB_RUN_NUMBER'","GITHUB_SHA":"'$GITHUB_SHA'","GITHUB_REF":"'$GITHUB_REF'","GITHUB_REPOSITORY":"'$GITHUB_REPOSITORY'","GITHUB_ACTOR":"'$GITHUB_ACTOR'"}' ; export DEPLOY_SIG="sha1=`echo -n "$DEPLOY_CONTENT" | openssl sha1 -hmac $DEPLOY_KEY | sed 's/^.* //'`" ; curl -X POST "$DEPLOY_URL" --data "$DEPLOY_CONTENT" -H "Content-Type: application/json" -H "$DEPLOY_HEADER: $DEPLOY_SIG" ; + + - name: Deploy to prod + if: github.event_name == 'push' && github.ref == 'refs/heads/develop' + env: + DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }} + DEPLOY_URL: ${{ secrets.DEPLOY_URL }} + DEPLOY_HEADER: ${{ secrets.DEPLOY_HEADER }} + run: | + set -x + export DEPLOY_CONTENT='{"GITHUB_RUN_NUMBER":"'$GITHUB_RUN_NUMBER'","GITHUB_SHA":"'$GITHUB_SHA'","GITHUB_REF":"'$GITHUB_REF'","GITHUB_REPOSITORY":"'$GITHUB_REPOSITORY'","GITHUB_ACTOR":"'$GITHUB_ACTOR'"}' ; + export DEPLOY_SIG="sha1=`echo -n "$DEPLOY_CONTENT" | openssl sha1 -hmac $DEPLOY_KEY | sed 's/^.* //'`" ; + curl -X POST "$DEPLOY_URL" --data "$DEPLOY_CONTENT" -H "Content-Type: application/json" -H "$DEPLOY_HEADER: $DEPLOY_SIG" ; diff --git a/.gitignore b/.gitignore index cd3ae0bd..a88d2424 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ build/ bundle apache/logs nginx/logs +app/node_modules/ + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..96e3016b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM node:18-alpine as nodebuilder + +WORKDIR /app + +COPY app/package.json app/package-lock.json ./ + + +RUN npm install + +FROM tiryoh/jekyll:4.2.1 + +COPY --from=nodebuilder /app/node_modules /srv/jekyll/node_modules + +WORKDIR /srv/jekyll + +ENV PATH="/srv/jekyll/node_modules/.bin:${PATH}" + +EXPOSE 8080 + +CMD ["jekyll", "build", "--watch"] \ No newline at end of file diff --git a/app/404.html b/app/404.html new file mode 100644 index 00000000..94779dad --- /dev/null +++ b/app/404.html @@ -0,0 +1,20 @@ +--- +title: 404 +layout: default +permalink: /404.html +--- + +
+
+

Oops!

+

+ We can’t seem to find the page you are looking for. +

+

+ To report a broken link, please contact us. +

+
+
+ {% include 404.html %} +
+
diff --git a/app/404.md b/app/404.md deleted file mode 100644 index cd40cd03..00000000 --- a/app/404.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Page Not Found (404) -sitemap: false -layout: simple-page ---- - -Oops! -====== - -We can't seem to find the page you are looking for. - -To report a broken link, please [contact us](mailto:{{ site.email }}). diff --git a/app/Gemfile b/app/Gemfile index f3a77934..feb987de 100644 --- a/app/Gemfile +++ b/app/Gemfile @@ -1,3 +1,4 @@ source "https://rubygems.org" gem 'jekyll-sitemap' gem 'jekyll-paginate-v2' +gem 'jekyll-postcss-v2' diff --git a/app/Gemfile.lock b/app/Gemfile.lock index 2fab10e0..e55d885d 100644 --- a/app/Gemfile.lock +++ b/app/Gemfile.lock @@ -31,6 +31,7 @@ GEM terminal-table (~> 2.0) jekyll-paginate-v2 (3.0.0) jekyll (>= 3.0, < 5.0) + jekyll-postcss-v2 (1.0.2) jekyll-sass-converter (2.2.0) sassc (> 2.0.1, < 3.0) jekyll-sitemap (1.4.0) @@ -66,6 +67,7 @@ PLATFORMS DEPENDENCIES jekyll-paginate-v2 + jekyll-postcss-v2 jekyll-sitemap BUNDLED WITH diff --git a/app/_config.yml b/app/_config.yml index cba225bd..373c9caf 100644 --- a/app/_config.yml +++ b/app/_config.yml @@ -5,12 +5,17 @@ markdown: kramdown plugins: - jekyll-paginate-v2 - jekyll-sitemap + - jekyll-postcss-v2 liquid: error_mode: strict sass: sass_dir: _scss style: nested +postcss: + cache: false timezone: Etc/GMT +future: true + # Site settings title: The Library Innovation Lab at Harvard University @@ -24,6 +29,8 @@ sharing-image: "thumbs/800x800r/lil-primary-black.png" email: lil@law.harvard.edu twitter_account_name: HarvardLIL twitter_url: https://twitter.com/harvardlil +linkedin_account_name: libraryinnovationlab +linkedin_url: https://www.linkedin.com/company/libraryinnovationlab/ facebook_url: https://www.facebook.com/HarvardLibraryInnovationLab/ github_account_name: harvard-lil github_url: https://github.com/harvard-lil @@ -38,41 +45,38 @@ blog_feed_title: The Harvard Library Innovation Lab # Collections collections: - projects_active: + our_work: output: true - permalink: /projects/:slug/ - projects_retired: + permalink: /our-work/:slug/ + our_work_pageless: output: false - sketches_active: + events: output: true - permalink: /sketches/:slug/ - sketches_retired: + permalink: /events/:slug/ + jobs: output: false # Plugins news_feed_for: - - projects_active - - projects_retired - - sketches_active + - our_work contributors_feed_for: - - projects_active - - projects_retired + - our_work # Defaults defaults: - scope: path: "" - type: projects_active + type: our_work values: - layout: project - type: project + layout: our_work + type: our_work - scope: path: "" - type: sketches_active + type: events values: - layout: project - type: sketch + layout: event + type: event - scope: path: "" type: posts @@ -83,7 +87,6 @@ defaults: - scope: path: "" values: - custom-footer: false sharing-card-type: summary # Feature Flags @@ -104,7 +107,7 @@ pagination: collection: 'posts' # How many objects per paginated page, used to be `paginate` (default: 0, means all) - per_page: 10 + per_page: 12 # The permalink structure for the paginated pages (this can be any level deep) permalink: '/page/:num/' # Pages are index.html inside this folder (default) @@ -112,7 +115,7 @@ pagination: #permalink: '/page/:num' # Pages are html files, linked jekyll extensionless permalink style. # Optional the title format for the paginated pages (supports :title for original page title, :num for pagination page number, :max for total number of pages) - title: ':title - page :num' + title: 'Page :num of :max | :title' # Limit how many pagenated pages to create (default: 0, means all) limit: 0 @@ -155,12 +158,12 @@ autopages: layouts: - 'tag_or_category.html' # Optional, the title that each category paginate page should get (:cat is replaced by the Category name) - title: 'Posts in category :cat' + title: 'Posts in category ":cat" | Blog' # Optional, the permalink for the pagination page (:cat is replaced), # the pagination permalink path is then appended to this permalink structure permalink: '/blog/category/:cat/' slugify: - mode: raw + mode: default cased: true collections: @@ -170,8 +173,8 @@ autopages: tags: layouts: - 'tag_or_category.html' - title: 'Posts tagged with :tag' # :tag is replaced by the tag name + title: 'Posts tagged ":tag" | Blog' # :tag is replaced by the tag name permalink: '/blog/tag/:tag/' slugify: - mode: raw + mode: default cased: true diff --git a/app/_data/additional_research.yaml b/app/_data/additional_research.yaml new file mode 100644 index 00000000..f22be127 --- /dev/null +++ b/app/_data/additional_research.yaml @@ -0,0 +1,12 @@ + +- title: Banned Books + url: /blog/2023/09/25/ai-book-bans-freedom-to-read-case-study/ + subcategory: AI Explorations + order: + +- title: WARC-GPT + url: /blog/2024/02/12/warc-gpt-an-open-source-tool-for-exploring-web-archives-with-ai/ + subcategory: AI Explorations + order: + + diff --git a/app/_data/featured_tags.yaml b/app/_data/featured_tags.yaml index 1536f4b5..f2238927 100644 --- a/app/_data/featured_tags.yaml +++ b/app/_data/featured_tags.yaml @@ -1,4 +1,4 @@ - AI Research - Tools - Library Principles -- Fellows Research +- Fellows’ Research diff --git a/app/_data/fellows_summer_2016.yaml b/app/_data/fellows_summer_2016.yaml index d5b1dca5..57dfd7c7 100644 --- a/app/_data/fellows_summer_2016.yaml +++ b/app/_data/fellows_summer_2016.yaml @@ -41,7 +41,7 @@ I plan to apply deep learning techniques to the CAP corpus and formalize the infrastructure architecture choices we're making into a template that can be easily cloned for future Lab projects. find_out_more: - - "[lil.law.harvard.edu/projects/caselaw-access-project](http://lil.law.harvard.edu/projects/caselaw-access-project/)" + - "[lil.law.harvard.edu/our-work/caselaw-access-project](http://lil.law.harvard.edu/our-work/caselaw-access-project/)" - fellow: sara-frug diff --git a/app/_data/people.yaml b/app/_data/people.yaml index 68abc40a..30222a3f 100644 --- a/app/_data/people.yaml +++ b/app/_data/people.yaml @@ -3,7 +3,7 @@ # need to be created when adding a person and placed in the thumbs dir # # When adding a current team member, add three sizes - 216x216, 432x432, 648x648 # -# see https://github.com/harvard-lil/website-static?tab=readme-ov-file#adding-current-affiliates # +# see https://github.com/harvard-lil/website-static?tab=readme-ov-file#adding-current-Fellows # # Currently affiliated # @@ -292,7 +292,7 @@ maxwell-neely-cohen: section: Affiliates -# Former affiliates, and single-project collaborators +# Former Fellows, and single-project collaborators # Entries should not have a "current:" key # Former LIL staff, fellows, RAs should have "affiliated: true" diff --git a/app/_data/supporters.yaml b/app/_data/supporters.yaml new file mode 100644 index 00000000..0575e81d --- /dev/null +++ b/app/_data/supporters.yaml @@ -0,0 +1,42 @@ +institutions: + - name: Harvard Law School + logo: supporters/harvard-law-school-logo.png + + - name: Berkman Klein Center for Internet & Society + logo: supporters/bkc-logo.svg + +foundations: + - name: Filecoin Foundation for the Decentralized Web + logo: supporters/ffdw-logo.png + + - name: Institute of Museum and Library Services + logo: supporters/imls-logo.jpg + + - name: Knight Foundation + logo: supporters/knight-logo.png + +nonprofits: + - name: Internet Archive + logo: supporters/ia-logo.svg + + - name: Webrecorder + logo: supporters/webrecorder-logo.png + + - name: Free Law Project + logo: supporters/flp-logo.svg + +companies: + - name: Cloudflare + logo: supporters/cloudflare-logo.png + + - name: LexisNexis + logo: supporters/lexisnexis-logo.png + + - name: Thomson Reuters + logo: supporters/tr-logo.png + + - name: OpenAI + logo: supporters/openai-logo.png + + - name: Fastcase + logo: supporters/fastcase-logo.png \ No newline at end of file diff --git a/app/_events/harvard-law-ai-summit.md b/app/_events/harvard-law-ai-summit.md new file mode 100644 index 00000000..fd0207f5 --- /dev/null +++ b/app/_events/harvard-law-ai-summit.md @@ -0,0 +1,14 @@ +--- +title: "Harvard Law AI Summit" +date: 2023-09-19 19:05:36+00:00 +short_description: "A closed-door gathering of experts exploring AI as a new form of knowledge." +description: "The Harvard Law AI Summit was an invitation-only gathering across the spectrum of law, government, AI research, civil society and social science. The summit explored how AI as a new form of knowledge is poised to challenge and reshape institutions." +banner: ai-summit-sm.png +banner_large: ai-summit-lg.png +--- + +The Harvard Law AI Summit was an invitation-only gathering across the spectrum of law, government, AI research, civil society and social science. The summit explored how AI as a new form of knowledge is poised to challenge and reshape institutions. + +Generative AI offers a defining moment where information archives gain the ability to answer questions about themselves; to act without human intervention; and even to infer and replicate the processes that created them. It will challenge and reshape every institution — for better and worse — and we cannot draw on just one field or expertise to respond to it. + +The one-day summit observed the Chatham House Rule and featured short, provocative talks from leaders in fields working on, or affected by, AI. This was combined with discussion among participants selected for their incisive, expert perspectives on what comes next. diff --git a/app/_events/transform-copyright.md b/app/_events/transform-copyright.md new file mode 100644 index 00000000..fff5ef76 --- /dev/null +++ b/app/_events/transform-copyright.md @@ -0,0 +1,33 @@ +--- +title: "Transform: Copyright" +date: 2024-04-22 19:05:36+00:00 +short_description: "An invite-only workshop for experts trying to reconcile the tensions between AI development and copyright." +description: "Transform: Copyright was a closed-door gathering of experts from intersecting fields grappling with the interaction of generative AI and copyright." + +banner: transform-copyright-sm.png +banner_large: transform-copyright-lg.png +--- + +Transform: Copyright was a closed-door gathering of experts from intersecting fields grappling with the interaction of generative AI and copyright. + +Representatives from a variety of stakeholder communities were invited, including: + +- Creators of the works used to train models +- Owners of the copyrights in those works +- Persons with privacy interests in the data embodied in the works used +the train the models +- The organizations (both for-profit firms and nonprofit organizations) that +create the models and the datasets +- Users of the models + +The overarching aspiration of Transform: Copyright was to +identify, through discussion and collaboration, potential +practicable “win-win” resolutions of the intensifying +controversies pertaining to generative AI [“GenAI”] as it +intersects with copyright. That, in turn, might facilitate the +eventual adoption, through consensus, of a set of “best +practices” to which all participants in the field could adhere +and from which all would benefit. + +This event was held under the Chatham House Rule, meaning that participants were free to use the information received, but neither the identity nor the affiliation of the speaker(s), nor that of any other participant, may be revealed. + diff --git a/app/_events/transform-justice.md b/app/_events/transform-justice.md new file mode 100644 index 00000000..4388f10d --- /dev/null +++ b/app/_events/transform-justice.md @@ -0,0 +1,38 @@ +--- +title: "Transform: Justice" +date: 2024-03-08 19:05:36+00:00 +short_description: "A celebration of the full, unqualified release of data from the Caselaw Access Project." +description: "A celebration of the full, unqualified release of the data from the Caselaw Access Project will be the anchor of an event focused on the future of the access to law movement. Speakers across government, academia, and industry will sketch out the opportunities ahead of us for expanding access to legal data and its waterfall effects across society and justice." + +banner: transform-justice-sm.png +banner_large: transform-justice-lg.png +--- + +The Library Innovation Lab hosted Transform: Justice at the Harvard Law School on March 8, 2024. A celebration of the full, unqualified release of the data from the Caselaw Access Project was the anchor of a gathering focused on the future of the access to law movement. Speakers across government, academia, and industry sketched out the opportunities ahead of us for expanding access to legal data and its waterfall effects across society and justice. + +## The Caselaw Access Project + +The Caselaw Access Project scanned the entirety of the Harvard Law School Library's physical collection of American case law and made it machine-readable in a consistent format available online. This process was funded in part by an industry partner who worked with us for the first few years post-digitization to provide access to the data to researchers and the public, rather than other commercial entities. To facilitate that agreement, the Library Innovation Lab maintained case.law as the primary access point for the data in order to bring the corpus to researchers and the general public. + +Learn more about the Caselaw Access Project's story in this [video we made to celebrate.](https://vimeo.com/922493882) + +
+ +
+ + +Transform: Justice was, in part, a celebration of the full, unqualified release of the Caselaw Access Project data. Now that there is no need for metered access to the corpus, in order to create more room for our team to do exploratory work, and to consolidate efforts, we've transitioned case.law to a static state and started partnerships with other organizations in the open legal data space to shepherd this data into its next phase. Thank you to the Free Law Project for all your support and collaboration. + +## Event Recordings + +This event was live streamed and partially recorded. You can find videos of the program on Harvard Law School's Youtube channel. + +## Media Coverage + +- "Access to law is foundational to the broader goal of access to justice" from Harvard Law Today. +- "Event Tomorrow Marks the End of Commercial Restrictions on the Caselaw Access Project that Digitized All U.S. Case Law" from LawSites. +- "Harvard Law Releases 40M Pages of Digitzed Caselaw" from Law360. + +## Contacts + +If you have questions regarding the event please reach out to Clare Stanton. diff --git a/app/_includes/404.html b/app/_includes/404.html new file mode 100644 index 00000000..126856c4 --- /dev/null +++ b/app/_includes/404.html @@ -0,0 +1,5 @@ + + + + + diff --git a/app/_includes/about-people-affiliated.html b/app/_includes/about-people-affiliated.html index 5f700dc7..f3e2e113 100644 --- a/app/_includes/about-people-affiliated.html +++ b/app/_includes/about-people-affiliated.html @@ -1,9 +1,16 @@ {% assign person = include.person %} -