diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 00000000..8fc26a3d
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,128 @@
+# AGENTS.md
+
+## Purpose
+
+This repository is the source for the OpenPrinting website. It is a Next.js App Router site that statically exports to GitHub Pages.
+
+When reviewing changes in this repo, optimize for:
+
+- behavioral regressions in page generation, routing, and content loading
+- breakage specific to static export and GitHub Pages deployment
+- content/rendering issues in Markdown-driven pages
+- accidental edits to generated artifacts or vendored output
+
+## Repository Map
+
+- `app/`: route handlers and page entry points
+- `components/`: shared UI, Markdown rendering, navigation, search UI
+- `contents/`: source content in Markdown
+- `data/`: structured data for authors, GSOC/GSOD pages, summaries
+- `lib/`: shared helpers for content loading, image path handling, search runtime
+- `scripts/search/`: build-time search index generation
+- `public/`: static assets and generated search index output
+
+## Source Of Truth
+
+Treat these as source files:
+
+- `app/**`
+- `components/**`
+- `contents/**`
+- `data/**`
+- `lib/**`
+- `scripts/**`
+- config files such as `package.json`, `tsconfig.json`, `next.config.ts`, `eslint.config.mjs`
+
+Treat these as generated or build output and review them only when the change explicitly requires regeneration:
+
+- `.next/`
+- `out/`
+- `public/search/static-index.json`
+- `node_modules/`
+
+If a PR changes generated output without changing the inputs that produce it, call that out.
+
+## Architecture Notes
+
+- Static export is enabled in [`next.config.ts`](/Users/rudra/Desktop/workspace/openprinting/openprinting.github.io/next.config.ts). `output: "export"` means features requiring a server runtime are risky by default.
+- Production builds compute `basePath` and `assetPrefix` dynamically via `config/site.config.ts`. Absolute links, image paths, and asset references must continue to work correctly under this generated prefix. Do not hardcode strings like `/openprinting.github.io`.
+- Search index generation runs in `prebuild` via `tsx scripts/search/build-index.ts`. Changes affecting content extraction, slugs, URLs, or searchable text often require regenerating `public/search/static-index.json`.
+- A large part of the site is Markdown-driven. Review content pipeline changes for frontmatter assumptions, slug handling, excerpt/title sanitization, and image resolution.
+- This repo uses Yarn as the expected package manager. Flag changes that introduce package-manager drift or inconsistent lockfile/package-manager usage unless the migration is intentional.
+
+## Configuration & Portability
+
+- **Single Source of Truth**: All deployment-specific values, such as GitHub organization / repository names, base paths, and external URLs (e.g., Giscus configs, CI pipelines), are centralized in `config/site.config.ts`.
+- **Migration Guide**: When migrating the repository or deploying to a new location, update `config/site.config.ts`. Always import `siteConfig` from `"@/config/site.config"` rather than hardcoding.
+
+## Review Focus
+
+### Routing and content loading
+
+- Check that route params map to the right content directories.
+- Watch for slug mismatches between file names, generated URLs, and redirects.
+- For dynamic routes like `app/[...slug]`, `app/documentation/[doc]`, and `app/projects/[project]`, verify not-found and redirect behavior still makes sense for static export.
+
+### Static export constraints
+
+- Flag use of features that depend on request-time server execution unless the repo already supports them safely.
+- Be suspicious of changes that assume root-relative assets without considering the production `basePath`.
+- For images and links, prefer helpers already used by the repo such as `getImageSrc`.
+- Check that asset `src` values are valid for both local development and production export. A change that appears to work locally but breaks under the production prefix should be treated as a bug.
+
+### UI and styling
+
+- UI changes should follow the current visual theme of the site rather than introducing a disconnected style.
+- Verify layouts remain responsive across common mobile and desktop widths.
+- Confirm UI changes remain compatible with both light mode and dark mode, including text contrast, borders, icons, and code/content surfaces.
+
+### Markdown rendering and content safety
+
+- Review changes to [`components/markdown-renderer.tsx`](/Users/rudra/Desktop/workspace/openprinting/openprinting.github.io/components/markdown-renderer.tsx) carefully. It uses `rehype-raw`, so rendering changes can have broad effects on embedded HTML in content.
+- Confirm frontmatter fields remain optional where the content corpus is inconsistent.
+- Check that teaser images, author metadata, and reading time logic still degrade gracefully for older posts.
+
+### Search
+
+- Review `scripts/search/*`, `lib/search/*`, and `public/search/static-index.json` together.
+- If URL generation or content extraction changes, verify the search index schema and document URLs remain consistent with the app routes.
+
+### Content-heavy changes
+
+- When reviewing bulk Markdown edits, prioritize broken links, malformed frontmatter, invalid image paths, and dates/slugs that affect sorting or routing.
+- For post metadata, note that date parsing affects ordering in helpers such as [`lib/get-latest-posts.ts`](/Users/rudra/Desktop/workspace/openprinting/openprinting.github.io/lib/get-latest-posts.ts).
+
+## Validation Commands
+
+Use the smallest relevant validation first, then escalate to a full build for routing/content pipeline changes.
+
+```bash
+yarn lint
+yarn build
+```
+
+What each command validates here:
+
+- `yarn lint`: code quality and some framework-level issues
+- `yarn build`: static export viability and search index generation
+
+There does not appear to be a dedicated test suite in this repo. If you cannot run a command, say so explicitly in the review.
+
+## Review Output Expectations
+
+When reviewing a change, lead with findings, not a summary. Prioritize:
+
+1. broken routes or static export regressions
+2. asset path and `basePath` mistakes
+3. content parsing or Markdown rendering regressions
+4. generated-file churn without corresponding source changes
+5. missing validation for risky changes
+
+If no issues are found, say that explicitly and mention any residual risk, especially when a full `npm run build` was not run.
+
+## Editing Guidance For Agents
+
+- Avoid editing generated directories unless the task explicitly requires regeneration.
+- Do not overwrite user changes in generated artifacts to "clean up" the diff.
+- If content or search behavior changes, mention whether `public/search/static-index.json` should be regenerated.
+- Keep new code compatible with static export unless the task clearly changes deployment assumptions.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index f88d0ae9..00000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## How to contribute
-
-Help from community is necessary to make any opensource project great. We want to keep it as easy as possible for community to contribute changes. There are a few guidelines that we need to follow so that it is easy for others to understand and change the codebase.
-
-### Getting Started
-* Setup jekyll environment. You can follow [this link](https://jekyllrb.com/docs/).
-* Now, you have a working jekyll environment. Clone the source code from [github](https://github.com/OpenPrinting/openprinting.github.io).
-* Go to the directory and run:
-```
-bundle exec jekyll serve
-```
-* If you want to access website from some other device on local network, use:
-```
-bundle exec jekyll serve --host=0.0.0.0
-```
-* Open ``` localhost:4000 ```
-
-### Issues
-* If you want to work on some issue, first comment on that issue that you want to work.
-* If you want to open a new Issue. First make sure similiar issue is not present.
-* In case of a bug, always mention browser you are using because different browsers may behave differently.
-* In case of an Idea, please mention how it will change user experience and/or how it will enhance functionality of the website.
-
-### Pull Requests
-* If you have made some changes in the codebase and want to generate a PR. First, pull latest version of code from [upstream](https://github.com/Esri/developer-support/wiki/Setting-the-upstream-for-a-fork). Remove all merge conflicts before generating PR.
-* In the PR, try to add working link of your work and if that is not possible, add screenshots.
-
-### Making changes
-* Whenever you are working on some major feature, always create a [new branch](https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging).
-* Whenever you add something above trivial, please add comments.
diff --git a/DEVELOPING.md b/DEVELOPING.md
deleted file mode 100644
index 58d1f965..00000000
--- a/DEVELOPING.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: DEVELOPING
----
-## Adding Disqus to your page:
-
-Disqus uses page's title to keep comments on different pages seperate. So, always set ```title``` of a page.
-
-For adding comments section to any page simply add these lines to the page:
-```
-
-{% if site.comments.provider and page.comments %}
- {% include comments.html %}
-{% endif %}
-
-```
-You don't need to add above lines, if you are using ```single``` layout.
-
-Don't forget to turn on comments in yaml:
-```
----
-comments: true
----
-```
\ No newline at end of file
diff --git a/Gemfile b/Gemfile
deleted file mode 100644
index 53f90aba..00000000
--- a/Gemfile
+++ /dev/null
@@ -1,11 +0,0 @@
-source "https://rubygems.org"
-
-gem "github-pages", group: :jekyll_plugins
-# gem "minimal-mistakes-jekyll"
-group :jekyll_plugins do
- gem "jekyll-include-cache"
- gem 'jekyll-algolia'
- #gem "jekyll-feed", "~> 0.6"
-end
-
-gem "kramdown-parser-gfm"
\ No newline at end of file
diff --git a/Gemfile.lock b/Gemfile.lock
deleted file mode 100644
index e4f36a4c..00000000
--- a/Gemfile.lock
+++ /dev/null
@@ -1,317 +0,0 @@
-GEM
- remote: https://rubygems.org/
- specs:
- activesupport (8.0.4.1)
- base64
- benchmark (>= 0.3)
- bigdecimal
- concurrent-ruby (~> 1.0, >= 1.3.1)
- connection_pool (>= 2.2.5)
- drb
- i18n (>= 1.6, < 2)
- logger (>= 1.4.2)
- minitest (>= 5.1, < 6)
- securerandom (>= 0.3)
- tzinfo (~> 2.0, >= 2.0.5)
- uri (>= 0.13.1)
- addressable (2.9.0)
- public_suffix (>= 2.0.2, < 8.0)
- algolia_html_extractor (2.6.4)
- json (~> 2.0)
- nokogiri (~> 1.10)
- algoliasearch (1.27.5)
- httpclient (~> 2.8, >= 2.8.3)
- json (>= 1.5.1)
- base64 (0.3.0)
- benchmark (0.5.0)
- bigdecimal (4.0.1)
- coffee-script (2.4.1)
- coffee-script-source
- execjs
- coffee-script-source (1.12.2)
- colorator (1.1.0)
- commonmarker (0.23.11)
- concurrent-ruby (1.3.6)
- connection_pool (3.0.2)
- csv (3.3.2)
- dnsruby (1.73.1)
- base64 (>= 0.2)
- logger (~> 1.6)
- simpleidn (~> 0.2.1)
- drb (2.2.3)
- em-websocket (0.5.3)
- eventmachine (>= 0.12.9)
- http_parser.rb (~> 0)
- ethon (0.16.0)
- ffi (>= 1.15.0)
- eventmachine (1.2.7)
- execjs (2.10.0)
- faraday (2.14.2)
- faraday-net_http (>= 2.0, < 3.5)
- json
- logger
- faraday-net_http (3.4.2)
- net-http (~> 0.5)
- ffi (1.17.1)
- ffi (1.17.1-arm64-darwin)
- ffi (1.17.1-x86_64-linux-gnu)
- filesize (0.2.0)
- forwardable-extended (2.6.0)
- gemoji (4.1.0)
- github-pages (232)
- github-pages-health-check (= 1.18.2)
- jekyll (= 3.10.0)
- jekyll-avatar (= 0.8.0)
- jekyll-coffeescript (= 1.2.2)
- jekyll-commonmark-ghpages (= 0.5.1)
- jekyll-default-layout (= 0.1.5)
- jekyll-feed (= 0.17.0)
- jekyll-gist (= 1.5.0)
- jekyll-github-metadata (= 2.16.1)
- jekyll-include-cache (= 0.2.1)
- jekyll-mentions (= 1.6.0)
- jekyll-optional-front-matter (= 0.3.2)
- jekyll-paginate (= 1.1.0)
- jekyll-readme-index (= 0.3.0)
- jekyll-redirect-from (= 0.16.0)
- jekyll-relative-links (= 0.6.1)
- jekyll-remote-theme (= 0.4.3)
- jekyll-sass-converter (= 1.5.2)
- jekyll-seo-tag (= 2.8.0)
- jekyll-sitemap (= 1.4.0)
- jekyll-swiss (= 1.0.0)
- jekyll-theme-architect (= 0.2.0)
- jekyll-theme-cayman (= 0.2.0)
- jekyll-theme-dinky (= 0.2.0)
- jekyll-theme-hacker (= 0.2.0)
- jekyll-theme-leap-day (= 0.2.0)
- jekyll-theme-merlot (= 0.2.0)
- jekyll-theme-midnight (= 0.2.0)
- jekyll-theme-minimal (= 0.2.0)
- jekyll-theme-modernist (= 0.2.0)
- jekyll-theme-primer (= 0.6.0)
- jekyll-theme-slate (= 0.2.0)
- jekyll-theme-tactile (= 0.2.0)
- jekyll-theme-time-machine (= 0.2.0)
- jekyll-titles-from-headings (= 0.5.3)
- jemoji (= 0.13.0)
- kramdown (= 2.4.0)
- kramdown-parser-gfm (= 1.1.0)
- liquid (= 4.0.4)
- mercenary (~> 0.3)
- minima (= 2.5.1)
- nokogiri (>= 1.16.2, < 2.0)
- rouge (= 3.30.0)
- terminal-table (~> 1.4)
- webrick (~> 1.8)
- github-pages-health-check (1.18.2)
- addressable (~> 2.3)
- dnsruby (~> 1.60)
- octokit (>= 4, < 8)
- public_suffix (>= 3.0, < 6.0)
- typhoeus (~> 1.3)
- html-pipeline (2.14.3)
- activesupport (>= 2)
- nokogiri (>= 1.4)
- http_parser.rb (0.8.0)
- httpclient (2.9.0)
- mutex_m
- i18n (1.14.8)
- concurrent-ruby (~> 1.0)
- jekyll (3.10.0)
- addressable (~> 2.4)
- colorator (~> 1.0)
- csv (~> 3.0)
- em-websocket (~> 0.5)
- i18n (>= 0.7, < 2)
- jekyll-sass-converter (~> 1.0)
- jekyll-watch (~> 2.0)
- kramdown (>= 1.17, < 3)
- liquid (~> 4.0)
- mercenary (~> 0.3.3)
- pathutil (~> 0.9)
- rouge (>= 1.7, < 4)
- safe_yaml (~> 1.0)
- webrick (>= 1.0)
- jekyll-algolia (1.7.1)
- algolia_html_extractor (~> 2.6)
- algoliasearch (~> 1.26)
- filesize (~> 0.1)
- jekyll (>= 3.6, < 5.0)
- json (~> 2.0)
- nokogiri (~> 1.6)
- progressbar (~> 1.9)
- verbal_expressions (~> 0.1.5)
- jekyll-avatar (0.8.0)
- jekyll (>= 3.0, < 5.0)
- jekyll-coffeescript (1.2.2)
- coffee-script (~> 2.2)
- coffee-script-source (~> 1.12)
- jekyll-commonmark (1.4.0)
- commonmarker (~> 0.22)
- jekyll-commonmark-ghpages (0.5.1)
- commonmarker (>= 0.23.7, < 1.1.0)
- jekyll (>= 3.9, < 4.0)
- jekyll-commonmark (~> 1.4.0)
- rouge (>= 2.0, < 5.0)
- jekyll-default-layout (0.1.5)
- jekyll (>= 3.0, < 5.0)
- jekyll-feed (0.17.0)
- jekyll (>= 3.7, < 5.0)
- jekyll-gist (1.5.0)
- octokit (~> 4.2)
- jekyll-github-metadata (2.16.1)
- jekyll (>= 3.4, < 5.0)
- octokit (>= 4, < 7, != 4.4.0)
- jekyll-include-cache (0.2.1)
- jekyll (>= 3.7, < 5.0)
- jekyll-mentions (1.6.0)
- html-pipeline (~> 2.3)
- jekyll (>= 3.7, < 5.0)
- jekyll-optional-front-matter (0.3.2)
- jekyll (>= 3.0, < 5.0)
- jekyll-paginate (1.1.0)
- jekyll-readme-index (0.3.0)
- jekyll (>= 3.0, < 5.0)
- jekyll-redirect-from (0.16.0)
- jekyll (>= 3.3, < 5.0)
- jekyll-relative-links (0.6.1)
- jekyll (>= 3.3, < 5.0)
- jekyll-remote-theme (0.4.3)
- addressable (~> 2.0)
- jekyll (>= 3.5, < 5.0)
- jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
- rubyzip (>= 1.3.0, < 3.0)
- jekyll-sass-converter (1.5.2)
- sass (~> 3.4)
- jekyll-seo-tag (2.8.0)
- jekyll (>= 3.8, < 5.0)
- jekyll-sitemap (1.4.0)
- jekyll (>= 3.7, < 5.0)
- jekyll-swiss (1.0.0)
- jekyll-theme-architect (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-cayman (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-dinky (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-hacker (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-leap-day (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-merlot (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-midnight (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-minimal (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-modernist (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-primer (0.6.0)
- jekyll (> 3.5, < 5.0)
- jekyll-github-metadata (~> 2.9)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-slate (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-tactile (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-theme-time-machine (0.2.0)
- jekyll (> 3.5, < 5.0)
- jekyll-seo-tag (~> 2.0)
- jekyll-titles-from-headings (0.5.3)
- jekyll (>= 3.3, < 5.0)
- jekyll-watch (2.2.1)
- listen (~> 3.0)
- jemoji (0.13.0)
- gemoji (>= 3, < 5)
- html-pipeline (~> 2.2)
- jekyll (>= 3.0, < 5.0)
- json (2.19.5)
- kramdown (2.4.0)
- rexml
- kramdown-parser-gfm (1.1.0)
- kramdown (~> 2.0)
- liquid (4.0.4)
- listen (3.9.0)
- rb-fsevent (~> 0.10, >= 0.10.3)
- rb-inotify (~> 0.9, >= 0.9.10)
- logger (1.7.0)
- mercenary (0.3.6)
- mini_portile2 (2.8.9)
- minima (2.5.1)
- jekyll (>= 3.5, < 5.0)
- jekyll-feed (~> 0.9)
- jekyll-seo-tag (~> 2.1)
- minitest (5.27.0)
- mutex_m (0.3.0)
- net-http (0.9.1)
- uri (>= 0.11.1)
- nokogiri (1.19.3)
- mini_portile2 (~> 2.8.2)
- racc (~> 1.4)
- nokogiri (1.19.3-arm64-darwin)
- racc (~> 1.4)
- nokogiri (1.19.3-x86_64-darwin)
- racc (~> 1.4)
- nokogiri (1.19.3-x86_64-linux-gnu)
- racc (~> 1.4)
- octokit (4.25.1)
- faraday (>= 1, < 3)
- sawyer (~> 0.9)
- pathutil (0.16.2)
- forwardable-extended (~> 2.6)
- progressbar (1.13.0)
- public_suffix (5.1.1)
- racc (1.8.1)
- rb-fsevent (0.11.2)
- rb-inotify (0.11.1)
- ffi (~> 1.0)
- rexml (3.4.2)
- rouge (3.30.0)
- rubyzip (2.4.1)
- safe_yaml (1.0.5)
- sass (3.7.4)
- sass-listen (~> 4.0.0)
- sass-listen (4.0.0)
- rb-fsevent (~> 0.9, >= 0.9.4)
- rb-inotify (~> 0.9, >= 0.9.7)
- sawyer (0.9.2)
- addressable (>= 2.3.5)
- faraday (>= 0.17.3, < 3)
- securerandom (0.4.1)
- simpleidn (0.2.3)
- terminal-table (1.8.0)
- unicode-display_width (~> 1.1, >= 1.1.1)
- typhoeus (1.4.1)
- ethon (>= 0.9.0)
- tzinfo (2.0.6)
- concurrent-ruby (~> 1.0)
- unicode-display_width (1.8.0)
- uri (1.1.1)
- verbal_expressions (0.1.5)
- webrick (1.9.1)
-
-PLATFORMS
- ruby
- universal-darwin-23
- x86_64-linux
-
-DEPENDENCIES
- github-pages
- jekyll-algolia
- jekyll-include-cache
- kramdown-parser-gfm
-
-BUNDLED WITH
- 2.5.16
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 916fc954..00000000
--- a/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright 2019 OpenPrinting
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..5ea3908f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,131 @@
+# OpenPrinting Website
+
+The official website for [OpenPrinting](https://openprinting.github.io/), built with Next.js, Tailwind CSS, and Framer Motion.
+
+OpenPrinting is a Linux Foundation workgroup that manages the printing architecture for Linux and UNIX-like operating systems.
+
+## Getting Started
+
+You need [Node.js](https://nodejs.org/) and [Yarn](https://yarnpkg.com/). Note that the
+Yarn command-line tool is packaged under two different names depending on your
+distribution: it is sometimes called `yarn` and sometimes `yarnpkg` (for example on
+Debian/Ubuntu, where the `yarn` name historically belonged to an unrelated package). If
+`yarn` is not found, try `yarnpkg` instead — wherever this README uses `yarn`, substitute
+`yarnpkg` if that is how it is installed on your system.
+
+### Debian / Ubuntu
+
+Install Node.js and Yarn from the distribution repositories:
+
+```bash
+sudo apt update
+sudo apt install nodejs npm yarnpkg
+```
+
+On Debian/Ubuntu the Yarn binary is installed as `yarnpkg` (the `yarn` name is used by a
+different package), so use `yarnpkg` in place of `yarn` in the commands below.
+
+This project pins Yarn 4 via the `packageManager` field in `package.json`. The distribution
+package is the older Yarn 1, which is only used to bootstrap; the pinned version is fetched
+automatically on first use. If you prefer to enable the modern Yarn directly, run
+`corepack enable` (Corepack ships with Node.js).
+
+### Install and run
+
+Install the dependencies:
+
+```bash
+yarn install
+```
+
+Start the development server:
+
+```bash
+yarn dev
+```
+
+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
+
+> **Important:** `yarn dev` does **not** generate the build-time data. The Foomatic
+> printer/driver database (under `public/foomatic-db/`) and the search indexes are produced by
+> `yarn build` (which runs `yarn generate`). Run `yarn build` — or just `yarn generate` — at
+> least once so that the printer/driver lookup and site search work locally. See
+> [Generating build-time data](#generating-build-time-data) below.
+
+> **Note:** running `yarn install` (especially when bootstrapping with the system's Yarn 1)
+> may modify `yarn.lock`. See [A note on `yarn.lock`](#a-note-on-yarnlock) below before you
+> run further git commands.
+
+## Project Structure
+
+- `app/` - Next.js App Router containing pages and layouts.
+- `components/` - Reusable UI components.
+- `contents/` - Markdown content representing news, blogs, and documentation.
+- `lib/` - Utility functions and shared library code.
+- `scripts/` - Build scripts, such as search index generation.
+- `public/` - Static files and assets.
+
+## Contributing
+
+Contributions are welcome! Please open an issue or submit a pull request if you find a bug or want to propose an enhancement.
+
+When making UI changes, please follow the existing Tailwind CSS design patterns.
+
+## Deployment
+
+This project is meant to be deployed statically on GitHub Pages. Note that Next.js is configured for static export in this repository.
+
+To build the static export locally:
+
+```bash
+yarn build
+```
+
+This will generate an `out/` directory containing the static HTML/CSS/JS files which are then hosted on GitHub Pages.
+
+## Generating build-time data
+
+Several parts of the site are **generated data, not source**, and `yarn build` is required to
+produce them. The build runs `yarn generate` first, which:
+
+- converts the upstream `foomatic-db` data into JSON and statically generates a page for every
+ printer and driver (output under `public/foomatic-db/`),
+- builds the client-side search indexes (`public/search/static-index.json` and
+ `public/search/foomatic-index.json`), and
+- generates the RSS feed (`public/feed.xml`).
+
+`yarn dev` / `next dev` alone does **not** produce any of this. So if you want the Foomatic
+printer/driver lookup and the site search to work locally, you must run `yarn build` — or just
+the data step on its own:
+
+```bash
+yarn generate
+```
+
+at least once. These outputs are git-ignored and regenerated on every build (see
+[Deployment](#deployment)), so you do not commit them.
+
+## A note on `yarn.lock`
+
+Installing dependencies or building can modify `yarn.lock` (for instance when the system's
+Yarn 1 is used to bootstrap the pinned Yarn 4). These local changes are not meant to be
+committed. Before running further git actions (`git pull`, `git commit`, `git checkout`, ...),
+discard them.
+
+To reset just this one file to the committed version:
+
+```bash
+git checkout -- yarn.lock
+```
+
+Or, if you have other local changes you want to keep temporarily, stash everything first:
+
+```bash
+git stash
+```
+
+## Naming Conventions
+
+- Route files follow Next.js App Router conventions.
+- Reusable React component filenames should converge on a single convention over time.
+- In this pass, existing mixed naming is preserved unless a touched area needs cleanup to stay consistent.
diff --git a/_config.yml b/_config.yml
deleted file mode 100644
index 8240a6e4..00000000
--- a/_config.yml
+++ /dev/null
@@ -1,429 +0,0 @@
-# Copyright 2020 OpenPrinting
-
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-
-# http://www.apache.org/licenses/LICENSE-2.0
-
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Welcome to Jekyll!
-#
-# This config file is meant for settings that affect your entire site, values
-# which you are expected to set up once and rarely need to edit after that.
-# For technical reasons, this file is *NOT* reloaded automatically when you use
-# `jekyll serve`. If you change this file, please restart the server process.
-
-remote_theme : "mmistakes/minimal-mistakes@4.20.1"
-# theme: minimal-mistakes-jekyll
-minimal_mistakes_skin : "air" # "air", "aqua", "contrast", "dark", "dirt", "neon", "mint", "plum", "sunrise"
-
-# Site Settings
-locale : "en-US"
-title : "OpenPrinting"
-title_separator : "-"
-name : "OpenPrinting"
-description : "Making Printing Just Work."
-url : https://openprinting.github.io # the base hostname & protocol for your site e.g. "https://mmistakes.github.io"
-baseurl : # the subpath of your site, e.g. "/blog"
-repository : "openprinting/openprinting.github.io" # GitHub username/repo-name e.g. "mmistakes/minimal-mistakes"
-teaser : # path of fallback teaser image, e.g. "/assets/images/500x300.png"
-# breadcrumbs : false # true, false (default)
-words_per_minute : 200
-comments:
- provider : "disqus" # false (default), "disqus", "discourse", "facebook", "google-plus", "staticman", "utterances", "custom"
- disqus:
- shortname : openprinting-org # https://help.disqus.com/customer/portal/articles/466208-what-s-a-shortname-
- discourse:
- server : # https://meta.discourse.org/t/embedding-discourse-comments-via-javascript/31963 , e.g.: meta.discourse.org
- facebook:
- # https://developers.facebook.com/docs/plugins/comments
- appid :
- num_posts : # 5 (default)
- colorscheme : # "light" (default), "dark"
- utterances:
- theme : # "github-light" (default), "github-dark"
-staticman:
- allowedFields : ['name', 'email', 'url', 'message']
- branch : # "master", "gh-pages"
- commitMessage : "New comment by {fields.name}"
- filename : comment-{@timestamp}
- format : "yml"
- moderation : true
- path : "_data/comments/{options.slug}"
- requiredFields : ['name', 'email', 'message']
- transforms:
- email : "md5"
- generatedFields:
- date:
- type : "date"
- options:
- format : "iso8601" # "iso8601" (default), "timestamp-seconds", "timestamp-milliseconds"
- endpoint : # URL of your own deployment with trailing slash, will fallback to the public instance
-atom_feed:
- path : # blank (default) uses feed.xml
-search : true # true, false (default)
-search_full_content : true # true, false (default)
-search_provider : "algolia"
-algolia:
- application_id : "QB6HVGBSBA"
- index_name : "dev_minimal-mistakes"
- search_only_api_key : "9d5014e5bbc77372547bce778dfa5663"
- powered_by : true
-
-# SEO Related
-google_site_verification :
-bing_site_verification :
-yandex_site_verification :
-
-# Social Sharing
-og_image : "/assets/images/bio-photo.jpg"
-# For specifying social profiles
-# - https://developers.google.com/structured-data/customize/social-profiles
-social:
- type : # Person or Organization (defaults to Person)
- name : # If the user or organization name differs from the site's name
- links: # An array of links to social media profiles
-
-# Analytics
-analytics:
- provider : false # false (default), "google", "google-universal", "custom"
- google:
- tracking_id :
-
-
-# Site Author
-author:
- name : "OpenPrinting"
- avatar : "/assets/images/logo.png"
- bio : "Making Printing Just Work!"
- location : "The Linux Foundation"
- links:
- - label: "Website"
- icon: "fas fa-fw fa-link"
- url: "https://www.openprinting.org/"
- - label: "GitHub"
- icon: "fab fa-fw fa-github"
- url: "https://github.com/openprinting"
- - label: "Mastodon"
- icon: "fab fa-fw fa-mastodon"
- url: "https://ubuntu.social/tags/OpenPrinting"
- - label: "LinkedIn"
- icon: "fab fa-fw fa-linkedin"
- url: "https://www.linkedin.com/company/openprinting/posts/"
-
-# Site Footer
-footer:
- links:
- - label: "GitHub"
- icon: "fab fa-fw fa-github"
- url: "https://github.com/openprinting"
- - label: "Mastodon"
- icon: "fab fa-fw fa-mastodon"
- url: "https://ubuntu.social/tags/OpenPrinting"
- - label: "LinkedIn"
- icon: "fab fa-fw fa-linkedin"
- url: "https://www.linkedin.com/company/openprinting/posts/"
- - label: "Code of Conduct"
- icon: "fas fa-file-contract"
- url: "/codeofconduct/"
-
-# Reading Files
-include:
- - .htaccess
- - _pages
- - _docpages
- - printers.html
- - airprint.json
-exclude:
- - "*.sublime-project"
- - "*.sublime-workspace"
- - vendor
- - .asset-cache
- - .bundle
- - .jekyll-assets-cache
- - .sass-cache
- - assets/js/plugins
- - assets/js/_main.js
- - assets/js/vendor
- - Capfile
- - CHANGELOG
- - config
- - Gemfile
- - Gruntfile.js
- - gulpfile.js
- - LICENSE
- - log
- - node_modules
- - package.json
- - Rakefile
- - README
- - tmp
-keep_files:
- - .git
- - .svn
-encoding: "utf-8"
-markdown_ext: "markdown,mkdown,mkdn,mkd,md"
-
-# Liquid
-strict_front_matter: true
-liquid:
- error_mode: strict
-
-# Conversion
-markdown: kramdown
-highlighter: rouge
-lsi: false
-excerpt_separator: "\n\n"
-incremental: false
-
-
-# Markdown Processing
-kramdown:
- input: GFM
- hard_wrap: false
- auto_ids: true
- footnote_nr: 1
- entity_output: as_char
- toc_levels: 1..6
- smart_quotes: lsquo,rsquo,ldquo,rdquo
- enable_coderay: false
-
-
-# Sass/SCSS
-sass:
- sass_dir: _sass
- style: compressed # http://sass-lang.com/documentation/file.SASS_REFERENCE.html#output_style
-
-
-# Outputting
-permalink: /:categories/:title/
-paginate: 5 # amount of posts to show
-paginate_path: /page:num/
-timezone: # http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
-
-
-# Plugins (previously gems:)
-plugins:
- - jekyll-feed
- - jekyll-include-cache
-
-# Collections
-collections:
- gsoc2020:
- output: true
- permalink: /:collection/:path/
- gsoc2021:
- output: true
- permalink: /:collection/:path/
- lfmp2020:
- output: true
- permalink: /:collection/:path/
- gsod2020:
- output: true
- permalink: /:collection/:path/
- gsoc2019:
- output: true
- permalink: /:collection/:path/
- driverless:
- output: true
- permalink: /:collection/:path/
- recipes:
- output: true
- permalink: /:collection/:path/
- pets:
- output: true
- permalink: /:collection/:path/
- portfolio:
- output: true
- permalink: /:collection/:path/
- projects:
- output: true
- permalink: /:collection/:path/
- upcoming-technologies:
- output: true
- permalink: /:collection/:path/
- documentation:
- output: true
- permalink: /:collection/:path/
-
-
-# Defaults
-defaults:
- # _posts
- - scope:
- path: ""
- type: posts
- values:
- layout: single
- author_profile: true
- read_time: true
- share: true
- related: true
- comments: true
- # _pages
- - scope:
- path: "_pages"
- type: pages
- values:
- layout: single
- author_profile: true
- # comments: true
- # _docpages
- - scope:
- path: "_docpages"
- type: pages
- values:
- layout: single
- author_profile: true
- # comments: true
-
- # _gsoc2021
- - scope:
- path: ""
- type: gsoc2021
- values:
- layout: single
- author_profile: false
- share: false
- excerpt: ""
- toc: true
- toc_label: "On This Page"
- sidebar:
- nav: "gsoc21"
- # comments: true
-
- # _gsoc2020
- - scope:
- path: ""
- type: gsoc2020
- values:
- layout: single
- author_profile: false
- share: false
- excerpt: ""
- toc: true
- toc_label: "On This Page"
- sidebar:
- nav: "gsoc20"
- # comments: true
-
- - scope:
- path: ""
- type: gsoc2019
- values:
- layout: single
- author_profile: false
- share: false
- excerpt: ""
- toc: true
- toc_label: "On This Page"
- sidebar:
- nav: "gsoc19"
- # comments: true
-
- # _lfmp2020
- - scope:
- path: ""
- type: lfmp2020
- values:
- layout: single
- author_profile: false
- share: false
- excerpt: ""
- toc: true
- toc_label: "On This Page"
- sidebar:
- nav: "lfmp20"
- # comments: true
-
- # _gsod2020
- - scope:
- path: ""
- type: gsod2020
- values:
- layout: single
- author_profile: false
- share: false
- excerpt: ""
- toc: true
- toc_label: "On This Page"
- sidebar:
- nav: "gsod20"
- # comments: true
-
- #_driverless
- - scope:
- path: ""
- type: driverless
- values:
- layout: single
- author_profile: false
- share: false
- excerpt: ""
- sidebar:
- - image: /assets/images/logo _ipp.png
- image_alt: "Driverless Printing"
- nav: "driverless"
- #upcoming-technologies
- - scope:
- path: ""
- type: upcoming-technologies
- values:
- layout: single
- author_profile: false
- share: true
- excerpt: ""
- comments: true
- #documentation
- - scope:
- path: ""
- type: documentation
- values:
- layout: single
- author_profile: true
- share: true
- excerpt: ""
- comments: true
- # _recipes
- - scope:
- path: ""
- type: recipes
- values:
- layout: single
- author_profile: true
- share: true
- # _pets
- - scope:
- path: ""
- type: pets
- values:
- layout: single
- author_profile: true
- share: true
- # _portfolio
- - scope:
- path: ""
- type: portfolio
- values:
- layout: single
- author_profile: false
- share: true
- # _projects
- - scope:
- path: ""
- type: projects
- values:
- layout: single
- author_profile: false
- share: false
- excerpt: ""
- # comments: true
- # toc: true
- # sidebar:
- # nav: "projects"
diff --git a/_data/authors.yml b/_data/authors.yml
deleted file mode 100644
index b7beaace..00000000
--- a/_data/authors.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-Till:
- name : "Till Kamppeter"
- bio : "OpenPrinting Organization Lead"
- avatar : "https://openprinting.github.io/assets/images/till-kamppeter.jpg"
- email : "till.kamppeter@gmail.com"
- github : "tillkamppeter"
- location : "Vienna, Austria"
-#
-Mike:
- name : "Michael Sweet"
- bio : "Author of CUPS and PAPPL"
- avatar : "https://openprinting.github.io/assets/images/michael-sweet.jpg"
-# email : "msweet@msweet.org"
- github : "michaelrsweet"
- location : "Canada"
-#
-Aveek:
- name : "Aveek Basu"
- bio : "OpenPrinting Program Manager"
-# avatar : "https://openprinting.github.io/assets/images/aveek-basu.jpg"
- email : "basu.aveek@gmail.com"
- github : "AveekBasu"
- location : "Kolkata, India"
-# stackoverflow: ""
-#
-Dheeraj:
- name : "Dheeraj"
- bio : "Sub Coordinator, Programming Club, IIT Mandi"
- avatar : "https://avatars.githubusercontent.com/dheeraj135"
- email : "dhirajyadav135@gmail.com"
- facebook : "dheeraj.168"
- github : "dheeraj135"
- linkedin : "dheeraj-yadav-282330154"
- uri : "https://dheeraj135.github.io"
- location : "Mandi, 175001, India"
-# stackoverflow: ""
-#
-Zdenek:
- name : "Zdenek Dohnal"
- bio : "Member of CUPS Release Managers group, RHEL/CentOS Stream/Fedora CUPS maintainer"
-# avatar : "https://openprinting.github.io/assets/images/zdenek-dohnal.jpg"
-# email : "zdohnal@redhat.com"
- github : "zdohnal"
- location: "Brno, Czech Republic"
-#
-CNihelton:
- name : "Carlos Nihelton"
- bio : "Software Engineer at Canonical's Ubuntu WSL Team"
- avatar : "https://openprinting.github.io/assets/images/cnihelton.jpg"
- email : "carlosnsoliveira@gmail.com"
- github : "CarlosNihelton"
- location: "Campinas, Brazil"
-#
diff --git a/_data/navigation.yml b/_data/navigation.yml
deleted file mode 100644
index 77ae3f00..00000000
--- a/_data/navigation.yml
+++ /dev/null
@@ -1,184 +0,0 @@
-# Copyright 2019 OpenPrinting
-
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-
-# http://www.apache.org/licenses/LICENSE-2.0
-
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# main links links
-main:
- - title: "About Us"
- url: /about-us/
- - title: "News and Events"
- url: /news/
- - title: "Projects"
- url: /projects/
- - title: "Downloads"
- url: /downloads/
- - title: "Documentation"
- url: /documentation/
- - title: "Upcoming Technologies"
- url: /upcoming-technologies/
- - title: "Driverless Printing"
- url: /driverless/
- - title: "Printers"
- url: "https://openprinting.org/printers"
- - title: "Printer Drivers"
- url: "https://openprinting.org/drivers"
- - title: "Legacy Printers under Windows"
- url: "/wsl-printer-app"
- - title: "Contact Us"
- url: /contact/
- - title: "Donations"
- url: /donations/
-
-gsoc21:
- - title: "GSOC 2021"
- children:
- - title: "GSOC 2021 Homepage"
- url: /gsoc2021/
- - title: "Make All Filter Functions Work Well Even Without PPD Files."
- url: /gsoc2021/01-Filter_withour-PPD/
- - title: "GUI for listing and managing available IPP services"
- url: gsoc2021/02-GUI-for-IPP/
- - title: "Firmware and other file handling in PAPPL"
- url: gsoc2021/03-File-Handling-in-PAPPL/
- - title: "Create a single universal CUPS filter to replace the chain of individual filters"
- url: /gsoc2021/04-Single-universal-filter/
- - title: "CUPS Filters: Converting Filters to Filter Functions"
- url: /gsoc2021/05-Filters-to-Filter//
-
-gsoc20:
- - title: "GSOC 2020"
- children:
- - title: "GSOC 2020 Homepage"
- url: /gsoc2020/
- - title: "Linux GUI application (can be part of GNOME printer tool) to admin MF devices using IPP System Service."
- url: /gsoc2020/01-Linux-GUI-Application/
- - title: "Common Print Dialog Qt implementation"
- url: gsoc2020/02-common-print-dialog/
- - title: "IPP scan (or virtual MF device) server (Scanner Application)"
- url: gsoc2020/03-ipp-scan-application/
- - title: "SANE module for IPP driverless scanning"
- url: /gsoc2020/04-sane-module/
- - title: "General Printer SDK"
- url: /gsoc2020/05-general-printer-sdk/
- - title: "Make Printer Applications Configurable"
- url: /gsoc2020/06-make-printer-application-configurable/
- - title: "Turn cups-browsed into printer application"
- url: /gsoc2020/07-cups-browsed-printer-app/
- - title: "Speed/Scaling optimization of cups browsed"
- url: /gsoc2020/08-optimization-cups-browsed/
- - title: "Wrapping Proprietary Drivers into Printer Applications"
- url: /gsoc2020/09-wrapping-proprietary-drivers/
- - title: "Gutenprint Printer Application"
- url: /gsoc2020/10-gutenprint-printer-application/
- - title: "Support for IPP Fax Out"
- url: /gsoc2020/11-ipp-fax-out/
- - title: "Turn the scp-dbus-service methods - GetBestDrivers and MissingExecutables - of system-config-printer into C"
- url: /gsoc2020/12-scp-dbus-service-into-c/
- - title: "Extract Raster data from PDFs for direct printing"
- url: /gsoc2020/13-extract-raster-from-pdf/
- - title: "Real roll paper support in cups-filters"
- url: /gsoc2020/14-roll-paper-support/
- - title: "Add Printer output backend to MuPDF"
- url: /gsoc2020/15-printer-output-backendto-mupdf/
- - title: "Printing of files directly from the file manager"
- url: /gsoc2020/16-print-files-directly-from-manager/
- - title: "Get the Cairo color management code upstream"
- url: /gsoc2020/17-get-cairo-code-upstream/
-
-gsoc19:
- - title: "GSOC 2019"
- children:
- - title: "GSOC 2019 HomePage"
- url: /gsoc2019/
- - title: "Generic Framework to turn legacy drivers consisting of CUPS filters and PPDs into Printer Applications"
- url: /gsoc2019/01-legacy-drivers-to-printer-applications/
- - title: "IPP scan (or virtual MF device) server (Scanner Application)"
- url: /gsoc2019/02-ipp-scan-server/
- - title: "SANE module for IPP driverless scanning"
- url: /gsoc2019/03-sane-module/
- - title: "IPP - ipptool test suite for IPP System Service"
- url: /gsoc2019/04-ipp-test-tool-for-ipp-system-service/
- - title: "IPP - ipptool test suite for IPP Errata Updates"
- url: /gsoc2019/05-ipp-test-tool-for-ipp-errata-updates/
- - title: "Linux GUI application (can be part of GNOME printer tool) to admin MF devices using IPP System Service."
- url: /gsoc2019/06-linux-gui-application/
- - title: "Improve the pdftoraster filter to not need copying Poppler source code or using unstable APIs"
- url: /gsoc2019/07-pdftoraster-filter/
- - title: "Foomatic Generating CUPS PPD generator (/usr/share/cups/drv/*.drv files) from Foomatic data"
- url: /gsoc2019/08-foomatic-generating-cups-ppd-generator/
- - title: "Add printer output backends to MuPDF"
- url: /gsoc2019/09-add-printer-output-backends-to-mupdf/
- - title: "Common Print Dialog Qt implementation"
- url: /gsoc2019/10-common-print-dialog/
- - title: "Turn the scp-dbus-service of system-config-printer into C"
- url: /gsoc2019/11-scp-dbus-service-into-c/
- - title: "Google Cloud Print - Desktop-integrated solution for registering local CUPS printers"
- url: /gsoc2019/12-gcp-desktop-solution-for-local-cups-printers/
- - title: "Printing of files directly from the file manager"
- url: /gsoc2019/13-print-files-from-file-manager/
- - title: "Get the cairo color management code upstream"
- url: /gsoc2019/14-cairo-color-management-code/
-
-driverless:
- - title: "Driverless Printing"
- children:
- - title: "Introduction to Driverless Printing"
- url: /driverless/
- - title: "Standards And their PDLS"
- url: /driverless/01-standards-and-their-pdls/
- - title: "Workflow of Driverless Printing"
- url: /driverless/02-workflow/
-# sidebar navigation list sample
-# sidebar-sample:
-# - title: "Parent Page A"
-# children:
-# - title: "Child Page A1"
-# url: /child-page-a1/
-# - title: "Child Page A2"
-# url: /child-page-a2/
-# - title: "Child Page A3"
-# url: /child-page-a3/
-# - title: "Child Page A4"
-# url: /child-page-a4/
-# - title: "Parent Page B"
-# children:
-# - title: "Child Page B1"
-# url: /child-page-b1/
-# - title: "Child Page B2"
-# url: /child-page-b2/
-# - title: "Child Page B3"
-# url: /child-page-b3/
-# - title: "Child Page B4"
-# url: /child-page-b4/
-# - title: "Child Page B5"
-# url: /child-page-b5/
-# - title: "Parent Page C"
-# children:
-# - title: "Child Page C1"
-# url: /child-page-c1/
-# - title: "Child Page C2"
-# url: /child-page-c2/
-# - title: "Child Page C3"
-# url: /child-page-c3/
-# - title: "Child Page C4"
-# url: /child-page-c4/
-# - title: "Child Page C5"
-# url: /child-page-c5/
-# - title: "Parent Page D"
-# children:
-# - title: "Child Page D1"
-# url: /child-page-d1/
-# - title: "Child Page D2"
-# url: /child-page-d2/
-# - title: "Child Page D3 (External)"
-# url: https://your-domain.com
diff --git a/_driverless/00-introduction.md b/_driverless/00-introduction.md
deleted file mode 100644
index 991aa1a5..00000000
--- a/_driverless/00-introduction.md
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/_driverless/01-standards-and-their-pdls.md b/_driverless/01-standards-and-their-pdls.md
deleted file mode 100644
index e3b1979c..00000000
--- a/_driverless/01-standards-and-their-pdls.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: Driverless Printing Standards And their PDLS
----
-There are four driverless printing standards established, but they all are based on the printer advertising itself via DNS-SD in the network, communicating with clients via IPP, and supporting a selection out of four known Page Description Languages (PDLs). The difference is merely only which selection of PDLs is supported.
-
-Due to this we actually do not distinguish between the standards any more and simply call it "driverless IPP printing" or simply "driverless printing".
-
-Here are the four standards and their PDLs:
-
-1. [AirPrint™](https://support.apple.com/en-ca/HT201311): Apple Raster/URF, JPEG, and PDF. AirPrint is Apple's "standard" to print from iOS, iPadOS, and macOS, and is the most common and oldest driverless printing standard.
-2. [IPP Everywhere™](https://www.pwg.org/ipp/everywhere.html): PWG Raster, JPEG, and PDF. IPP Everywhere is developed by the Printer Working Group (PWG) and is a completely open standard.
-3. [Mopria®](https://www.mopria.org): PCLm, PWG Raster, and PDF. Mopria is a proprietary profile of IPP used for printing from Android and Microsoft Windows®.
-4. [Wi-Fi Direct Print Services](https://www.wi-fi.org): PCLm, PWG Raster, and PDF. Wi-Fi Direct printers work as a Wi-Fi access point so that mobile devices can print without an existing Wi-Fi network.
-
-
-Apple Raster
-------------
-
-Apple Raster (aka URF) is Apple's own raster format for printing with AirPrint.
-It is similar to CUPS and PWG Raster but with much simpler page headers. Apple
-Raster uses a modified PackBits compression algorithm that works on whole pixels
-for non-bitmap graphics that is typically paired with GZIP compression during
-transmission to the printer.
-
-
-PCLm
-----
-
-PCLm is a raster-only subset of PDF that has nothing to do with the original HP
-PCL. Since PCLm files are valid PDF files, you can view them using a standard
-PDF file viewer or print them on a PDF printer. However, printers that support
-PCLm can only accept PCLm files produced for a particular combination of band
-height, color space, and resolution that is supported by the printer.
-
-
-PWG Raster Format
------------------
-
-The PWG Raster Format is a subset of CUPS raster that is documented in PWG
-Candidate Standard 5102.4-2012. Like Apple Raster, it uses a modified PackBits
-compression algorithm that works on whole pixels for non-bitmap graphics that is
-typically paired with GZIP compression during transmission to the printer.
diff --git a/_driverless/02-workflow.md b/_driverless/02-workflow.md
deleted file mode 100644
index bc8111fb..00000000
--- a/_driverless/02-workflow.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Workflow Of Driverless Printing
----
-
The workflow of driverless printing is always the same-:
-
-
-
The printer advertises itself by DNS-SD, with a summary of its most important capability information (especially also its PDLs and a one-line-string super summary in case of AirPrint printers) in its DNS-SD record.
-
Clients find these printers via DNS-SD.
-
The client polls the full capabilities info from the printer sending a get-printer-attributes IPP request. The printer returns a long list of info, especially paper sizes and types, unprintable margins, resolutions, input trays, finishers, quality settings, all user-settable options etc..
-
CUPS or cups-browsed on the client generate PPD files from this info and create print queues for each printer.
-
The print dialogs of the applications show the printers and allow access to all the user-settable options.
-
The user prints a job. The PDF from the application is turned into one of the PDLs which the printer supports by cups-filters. The settings selected by the user are passed along with the job as IPP attributes.
-
The printer prints the job and thanks to IPP the status can be observed, toner levels and any errors can get reported to the client.
-
If the printer is shut down, its queue will get automatically removed. So no clutter of print queues as souvenir of all the networks you have visited.
-The Internet Printing Protocol (IPP) does not only support printing, but also scanning, as there are many printers which also have a scanner (multi-function (MF) devices). Both CUPS and the developer tool ippserver emulate IPP network printers but not IPP scanners and so they cannot serve as a server to share a local scanner.
-
-
-### Student Tasks
-
-
-This task is about adding the scan server functionality. If you have a scanner connected locally (and it scans via SANE), share it as an IPP scanner, advertising itself and accepting jobs using the IPP driverless scanning standard. In contrary to SANE-based network scanning clients with any operating system, also phones or IoT devices can scan on your shared scanner.
-
-
-
-Also old hardware can be recycled to a modern MF device, and we have a sample implementation to motivate manufacturers to adopt IPP scanning.
-
-
-
-This server software will be a so-called Scanner Application, a sample implementation of the future form of scanner drivers, easily packageable in sandboxed, distribution-independent package formats like Snap.
-
-
-### Mentors
-
-
-Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), SANE upstream developers TBD
-
-Version 2.0 and newer of the Internet Printing Protocol (IPP) support polling the full set of capabilities of a printer and if the printer supports a known Page Description Language (PDL), like PWG Raster, Apple Raster, PCLm, or PDF, it is possible to print without printer-model-specific software (driver) or data (PPD file), so-called “driverless” printing. This concept was introduced for printing from smartphones and IoT devices which do not hold a large collection of printer drivers. Driverless printing is already fully supported under Linux. Standards following this scheme are IPP Everwhere, Apple AirPrint, Mopria, and Wi-Fi Direct Print.
-
-
-
-As there are many multi-function devices (printer/scanner/copier all-in-one) which use the IPP, the Printing Working Group (PWG) has also worked out a standard for IPP-based scanning, “driverless” scanning, to also allow scanning from a wide range of client devices, independent of which operating systems they are running.
-
-
-
-Conventional scanners are supported under Linux via the SANE (Scanner Access Now Easy) system and require drivers specific to the different scanner models. Most of them are written based on reverse-engineering due to lack of support by the scanner manufacturers. To get driverless scanning working with the software the users are used to the best solution is to write a SANE module for driverless IPP scanning. This module will then automatically support all IPP scanners, thousands of scanners where many of them do not yet exist.
-
-
-
-Even if there are no driverless IPP scanners on the market yet, this module can be used for accessing scanners with their driver provided as Scanner Application (see previous project in this list).
-
-
-### Student Tasks
-
-
-The student's task is to write this SANE module for IPP driverless scanning and so make Linux ready for the future of driverless devices.
-
-
-### Mentors
-
-Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), SANE upstream developers TBD
-
-
-### Desired Knowledge
-
-C programming, DNS-SD, IPP
-
-
-### Code License
-
-GPL 2+
-
diff --git a/_gsoc2019/06-linux-gui-application.md b/_gsoc2019/06-linux-gui-application.md
deleted file mode 100644
index 5218c196..00000000
--- a/_gsoc2019/06-linux-gui-application.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: Linux GUI application (can be part of GNOME printer tool) to admin MF devices using IPP System Service.
----
-
-### Introduction
-
-
-Most network printers have a web interface which allows to configure the printer from any computer in the network using a web browser. Advantage is that no printer-model-specific software needs to be installed on the computer in order to configure a printer, and one has no dependency on certain supported operating systems. One can even configure printers using a smartphone.
-
-
-
-Disadvantage is that every manufacturer does its web interface differently which makes administration of many printers of different brands awkward. In addition, automated printer administration with scripts requires different interfaces for each printer. And for setting local print queues you open your printer setup tool but for printer administration you have to open your browser.
-
-
-
-To make this easier the Printing Working Group (PWG) has introduced the IPP System Service standard. This is an interface made up of standardized IPP requests to poll printer capabilities and configure the printer as needed. Every printer from every manufacturer uses the same requests and so a common printer configuration interface can be added to printer setup tools or automated administration with scripts is possible.
-
-
-### Student Tasks
-
-The student's task will be to create an appropriate printer configuration interface for system-config-printer or for the GNOME Control Center.
-
-
-### Mentors
-
-Upstream developers of GNOME/GTK or system-config-printer TBD.
-
-CUPS has two mechanisms for on-the-fly-PPD generation to avoid the wasting of disk space by thousands of uncompressed (or slightly compressed) PPD files. One is to put an executable file into the /usr/lib/cups/driver/ directory which lists and generates PPD files on request, the other is using *.drv files in /usr/share/cups/drv, which contain the data for the PPDs in a simpler and more compact format.
-
-
-
-The former method is deprecated upstream and can be removed in a future release of CUPS, especially also because the executables can get slow in some cases.
-
-
-
-The latter is not yet supported by Foomatic and letting Foomatic support it is subject of this project idea.
-
-
-### Student Tasks
-
-The student's task is to create a utility which generates *.drv files from the whole database and/or from selected, printers, manufacturers, drivers, groups, …, depending on what the user requests.
-
-
-### Mentor
-
-Till Kamppeter, Project Leader OpenPrinting (till at linux dot com)
-
-MuPDF is a lightweight PDF renderer made by Artifex, the company behind Ghostscript. In contrary to Ghostscript, MuPDF is a pure PDF renderer. It does not contain a PostScript interpreter nor parts of it are written in PostScript. This makes it smaller, faster, and less resource-consuming, the ideal solution for mobile devices like tablets or smartphones.
-
-
-
-On mobile devices printing will not be done with having tons of printer-model-specific drivers on the system. Once, they consume the limited mass storage space, and second, one uses the mobile device in several different local networks with different printers: At home, in the office, in a copy shop, … and one wants to use the printers which are available there, without installing drivers and setting up queues.
-
-
-
-Therefore we want to have a system which automatically detects network printers and makes them available for local apps. To do so we restrict ourselves to printers with known, common languages: IPP Everywhere/AirPrint/Mopria/W-Fi Direct (driverless printing standards, using PWG Raster, Apple Raster, PCLm, and PDF) and PostScript, PDF, PCL 5c/e/6/XL (legacy standards). So MuPDF has to generate raster output for these languages, meaning raster embedded in the specifics of the language, and to avoid exhausting printer resources raster in small bands and no high-level output, even if the printer language is high-level.
-
-
-
-Artifex will also work on this, but to get additional man power we are also opening this project for students.
-
-
-
-Note that you have to assign copyright on your code to Artifex, as otherwise the code cannot be integrated in MuPDF.
-
-
-
-This project can be split to be worked on by more than one student.
-
-
-### Mentors
-
-MuPDF developers TBD, Till Kamppeter, Project Leader OpenPrinting (till at linux dot com)
-
-The Qt Print Support framework should be updated with the CPD support. The goal is to provide the CPD GUI features and d-bus communications with the CPD backend support for printing from Qt5 applications on support platforms.
-
-
-### Student Tasks
-
-Based on the GSoC work of the previous year, one example of Qt CPD implementation outside of Qt Print Support can be found at: https://github.com/rithvikp1998/CPDv2. For this task, the implementation is expected to start with QPrintDialog instead.
-
-
-### Mentors
-
-Dongxu Li (dongxuli2011 at gmail dot com), Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), TBD
-
-
-### Desired Knowledge
-
-C++ programming, Qt, CUPS
-
-
-### License
-
-Qt Contribution Agreement
-
\ No newline at end of file
diff --git a/_gsoc2019/11-scp-dbus-service-into-c.md b/_gsoc2019/11-scp-dbus-service-into-c.md
deleted file mode 100644
index b170d7a5..00000000
--- a/_gsoc2019/11-scp-dbus-service-into-c.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: Turn the scp-dbus-service of system-config-printer into C
----
-
-### Introduction
-
-
-system-config-printer was the default printer setup tool in Red Hat/Fedora Linux for a lot of time and also got adopted by Ubuntu around ten years ago. During this time it received a lot of development work, especially on the algorithms for finding the best driver for a printer and for identifying whether printer discovery results from the CUPS backends actually come from the same physical printer.
-
-
-
-To make these algorithms available for other printer setup tools (both interactive GUI tools and programs which fully automatically create print queues without user interaction) they got moved into a D-Bus service, scp-dbus-service. Now every other program can simply call the needed function via a D-Bus API. The printer setup tool in the GNOME Control Center for example works this way.
-
-
-
-system-config-printer was written in Python and therefore scp-dbus-service is also written in Python. This makes it depending on Python and also makes it loading the needed Python libraries into memory when started. This can cause delays during boot when a utility to auto-setup print queues is used.Also most printer setup tools are written in C, Therefore it makes sense to convert the D-Bus service into the C language.
-
-
-### Student Tasks
-
-The student's task is to turn the scp-dbus-service of system-config-printer into C, either as D-Bus service (would work out-of-the-box with many GUIs) or as a C library with API (simpler), ideally both. This will make it easier to write printer setup tools in practically any programming language.
-
-
-### Mentors
-
-Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), system-config-printer upstream developers TBD
-
diff --git a/_gsoc2019/12-gcp-desktop-solution-for-local-cups-printers.md b/_gsoc2019/12-gcp-desktop-solution-for-local-cups-printers.md
deleted file mode 100644
index b969d733..00000000
--- a/_gsoc2019/12-gcp-desktop-solution-for-local-cups-printers.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: Google Cloud Print - Desktop-integrated solution for registering local CUPS printers
----
-
-### Introduction
-
-Google Cloud Print is a service from Google which allows to print from anywhere with internet access to anywhere else with internet access, for example from a mobile phone to printer at home or in the office.
-
-
-
-To do so, one needs a Google account and there one registers one's printers so that they can accept jobs sent into the print facility of this Google account.
-
-
-
-On Linux there is already a way to share the local CUPS printers into Cloud Print: The Chrome/Chromium Browser. In its settings you can activate Google Cloud Print and the local queues get registered. The Browser even leaves a user daemon running when one closes it to continue keeping the printers available for Cloud Print.
-
-
-
-The disadvantage of this is that the functionality is bound to a web browser, so it is awkward for people who use Firefox for example.
-
-
-
-Do not suggest now to make the CUPS daemon (daemon which handles the print jobs) or cups-browsed (daemon which browses the network for printers and automatically creates local queues for them) registering the printers, as they are system-wide services and Google Cloud Print is based on the user's Google account, and so something which belongs to a single user.
-
-
-### Student Tasks
-
-What is needed is a user daemon which starts when logging in and stops when logging out, running with the rights of the user, connecting to the user's Google account registering the local CUPS printers the user is allowed to print on. It will need integration with the desktop for starting and stopping the daemon and for configuration in the desktop's settings utility.
-
-
-
-Ideally it should work with the GNOME desktop using GNOME Online Accounts and the GNOME settings manager.
-
-Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Ubuntu/GNOME GUI developers TBD
-
-
-### Desired Knowledge
-
-C/C++ programming, GUI programming, GTK
-
diff --git a/_gsoc2019/13-print-files-from-file-manager.md b/_gsoc2019/13-print-files-from-file-manager.md
deleted file mode 100644
index a7720bbc..00000000
--- a/_gsoc2019/13-print-files-from-file-manager.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: Printing of files directly from the file manager
----
-
-### Introduction
-
-
-Sometimes you browse through your files and see some files which you want to print, files in completely different formats: PDFs, photos, LibreOffice files, … It is awkward to double-click each file, one-by-one, to get it opened in its application, and then click “Print” in each application. It would be much easier to mark all these files, right-click and then click “Print” in the context menu.
-
-
-### Student Tasks
-
-Here the student's task is to add this functionality to a popular file manager, for example the one of GNOME.
-
-
-### Mentors
-
-Aveek Basu (basu dot aveek at gmail dot com), upstream developers of GNOME/GTK TBD.
-
-
-### Desired Knowledge
-
-C programming, GTK
-
-
-### Code License
-
-LGPL 2+
-
diff --git a/_gsoc2019/14-cairo-color-management-code.md b/_gsoc2019/14-cairo-color-management-code.md
deleted file mode 100644
index 4582dcbd..00000000
--- a/_gsoc2019/14-cairo-color-management-code.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Get the cairo color management code upstream
----
-
-### Introduction
-
-
-Expectations: The cairo and inskcape code is pushed upstream with any required modifications. Ideally someone familiar with the cairo community would take this on, as Adrian found it hard to get the code approved upstream.
-
-
-### Skills
-
-Understanding of basic color management, basic use of bzr and git, proficient in C.
-
-The Qt Print Support framework should be updated with the CPD support. The goal is to provide the CPD GUI features and d-bus communications with the CPD backend support for printing from Qt5 applications on support platforms.
-
-
-
-Based on the GSoC work of the previous year, one example of Qt CPD implementation outside of Qt Print Support can be found at: https://github.com/rithvikp1998/CPDv2. For this task, the implementation is expected to start with QPrintDialog instead.
-
-
-### Mentors
-
-Dongxu Li (dongxuli2011 at gmail dot com), Nilanjana Lodh, first implementor of the CPDB (nilanjanalodh at gmail dot com), Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), TBD
-
-The Internet Printing Protocol (IPP) does not only support printing, but also scanning, as there are many printers which also have a scanner (multi-function (MF) devices). Both CUPS and the developer tool ippserver emulate IPP network printers but not IPP scanners and so they cannot serve as a server to share a local scanner.
-
-
-
-This task is about adding the scan server functionality. If you have a scanner connected locally (and it scans via SANE), share it as an IPP scanner, advertising itself and accepting jobs using the IPP driverless scanning standard. In contrary to SANE-based network scanning clients with any operating system, also phones or IoT devices can scan on your shared scanner.
-
-
-
-Also old hardware can be recycled to a modern MF device, and we have a sample implementation to motivate manufacturers to adopt IPP scanning.
-
-
-
-This server software will be a so-called Scanner Application, a sample implementation of the future form of scanner drivers, easily packageable in sandboxed, distribution-independent package formats like Snap.
-
-
-### Mentors
-
-Alexander Pevzner, “airscan” SANE backend author (pzz at apevzner dot com), Thierry Hucahrd, “escl” SANE backend author (thierry at ordissimo dot com), Michael Sweet, author of CUPS (msweet at msweet dot org), Ira McDonald, OpenPrinting (blueroofmusic at gmail dot com), Smith Kennedy, HP (smith kennedy at hp dot com, Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), SANE upstream developers TBD
-
-Version 2.0 and newer of the Internet Printing Protocol (IPP) support polling the full set of capabilities of a printer and if the printer supports a known Page Description Language (PDL), like PWG Raster, Apple Raster, PCLm, or PDF, it is possible to print without printer-model-specific software (driver) or data (PPD file), so-called “driverless” printing. This concept was introduced for printing from smartphones and IoT devices which do not hold a large collection of printer drivers. Driverless printing is already fully supported under Linux. Standards following this scheme are IPP Everwhere, Apple AirPrint, Mopria, and Wi-Fi Direct Print.
-
-
-
-As there are many multi-function devices (printer/scanner/copier all-in-one) which use the IPP, the Printing Working Group (PWG) has also worked out a standard for IPP-based scanning, “driverless” scanning, to also allow scanning from a wide range of client devices, independent of which operating systems they are running.
-
-
-
-Conventional scanners are supported under Linux via the SANE (Scanner Access Now Easy) system and require drivers specific to the different scanner models. Most of them are written based on reverse-engineering due to lack of support by the scanner manufacturers. To get driverless scanning working with the software the users are used to the best solution is to write a SANE module for driverless IPP scanning. This module will then automatically support all IPP scanners, thousands of scanners where many of them do not yet exist.
-
-
-
-Even if there are no driverless IPP scanners on the market yet, this module can be used for accessing scanners with their driver provided as Scanner Application (see previous project in this list).
-
-
-
-The student's task is to write this SANE module for IPP driverless scanning and so make Linux ready for the future of driverless devices.
-
-
-### Mentors
-
-Alexander Pevzner, “airscan” SANE backend author (pzz at apevzner dot com), Thierry Hucahrd, “escl” SANE backend author (thierry at ordissimo dot com), Michael Sweet, author of CUPS (msweet at msweet dot org), Ira McDonald, OpenPrinting (blueroofmusic at gmail dot com), Smith Kennedy, HP (smith kennedy at hp dot com, Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), SANE upstream developers TBD
-
-
-### Desired Knowledge
-
-C programming, DNS-SD, IPP
-
-
-### Code License
-
-GPL 2+
-
\ No newline at end of file
diff --git a/_gsoc2020/07-cups-browsed-printer-app.md b/_gsoc2020/07-cups-browsed-printer-app.md
deleted file mode 100644
index 3e46853e..00000000
--- a/_gsoc2020/07-cups-browsed-printer-app.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-title: "Turn cups-browsed into printer application"
----
-
-### Introduction
-
-cups-browsed is a daemon which discovers remote printers, mainly IPP but also legacy CUPS browsing, and makes them locally available. It gives a lot of possibilities for configuration, like clustering printers so that the most suitable for a job is automatically selected, allowing access to printers from legacy servers, showing only the relevant printers from thousands of printers available on the network, …
-
-
-
-Currently it makes printers locally available by creating a queue on the locally running CUPS, and generating a PPD file for this queue. As PPD files in CUPS are deprecated and the support for them will soon go away, cups-browsed will have to follow, and the best way to do so, is to make a Printer Application from it. Instead of creating CUPS queues it will emulate IPP printers then, which get picked up automatically by CUPS.
-
-
-
-The student's task here is to add IPP server functionality (icluding DNS-SD advertising) to cups-browsed. cups-browsed is already a Glib-based multi-function daemon, so adding a service should not be that much difficult. Nothing of the existing functionality should be removed, the user should be able to select between local queue creation or IPP server by the configuration file.
-
-
-
-A plus, when there is time left, would be a configuration interface, ideally using IPP System Service.
-
-
-### Mentors
-
-Deepak Patankar (patankardeepak04 at gmail dot com), Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), TBD
-
-With sandboxed packaging, Linux distributions appear which do not use classic RPM or DEB packages any more, like the all-Snap Ubuntu Core. And also standard desktop and server distributions, like Ubuntu Desktop/Server, will convert more and more to Snaps. Especially CUPS will also be moved from a classic package to a snap. Then CUPS will not work with classic PPD/filter-based printer drivers any more but requires all drivers being provided as Printer Applications.
-
-
-
-Free software printer drivers can easily get converted, starting from rebuilding them to live inside a Snap, where everything is in other directories than in a usual system up to integrating its printer capability infoand filter algorithms directly into the IPP server daemon.
-
-
-
-Proprietary, closed-source printer drivers come as binary RPM or DEB files, or tarballs, or even self-extracting. They require a certain, in classic systems usually available, file system structure to put their files in during installation, and they also need some libraries which are common in classic systems. In a snap you do not have this “standard” file system structure and the binaries with hard-coded paths in them choke on that.
-
-
-
-A solution is to take the Printer Application framework and add a chroot to it. The proprietary driver will get installed in that chroot then.
-
-
-
-The student's task is to add this functionality to the Printer Application framework and create an easy way for users to install proprietary printer drivers into that chroot-equipped Printer Application.
-
-
-### Mentors
-
-Dheeraj Yadav (dhirajyadav135 at gmail dot com), Michael Sweet, author of CUPS (msweet at msweet dot org), Ira McDonald, OpenPrinting (blueroofmusic at gmail dot com), Smith Kennedy, HP (smith kennedy at hp dot com), Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), TBD
-
-Gutenprint is a printer driver for high-quality inkjet printing which is under continuous development for many years already and supports hundreds of printers. It is popular under users of both Linux and Mac OS X.
-
-
-
-Currently, it supports printing either the classic CUPS way, by a PPD generator and a filter or by a plug-in for the GIMP. It should be rather easy to add more ways of using the core driver functionality, as this functionality is in a library, all capability information of the supported printers, dithering and color correction algorithms, …
-
-
-
-The new mode of using this library should be a new Printer Application which will be the student´s task to create. The Gutenprint printer application should wrap the Gutenprint library and so support all the printers the library supports. The basic structure can be like the Printer Application framework but here we do not want to create the (deprecated) PPD files but instead, let the IPP server link directly with the library and serve out the printer capability information on client's get-printer-attributes requests. Also see Michael Sweet's work on PAPPL.
-
-
-### Mentors
-
-Dheeraj Yadav (dhirajyadav135 at gmail dot com), Michael Sweet, author of CUPS/LPrint/PAPPL and original creator of Gutenprint (msweet at msweet dot org), Ira McDonald, OpenPrinting (blueroofmusic at gmail dot com), Smith Kennedy, HP (smith kennedy at hp dot com), Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Gutenprint developers, TBD
-
-
-### Desired knowledge
-
-C programming, IPP
-
-
-### Code license
-
-(L)GPL 2+, Apache 2.0, MIT
-
\ No newline at end of file
diff --git a/_gsoc2020/11-ipp-fax-out.md b/_gsoc2020/11-ipp-fax-out.md
deleted file mode 100644
index a4d55e54..00000000
--- a/_gsoc2020/11-ipp-fax-out.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: "Support for IPP Fax Out"
----
-
-### Introduction
-
-Modern network multi-function devices (printer, scanner, fax) provide driverless operation (meaning no device/model-specific software or data is needed to use them). The device advertises itself on the network via DNS-SD providing a summary of its features and capabilities. Then a client can access the device using standard HTTP and IPP protocols to poll detailed capability info to be able to use the device and do the actual operation with the same communication protocols and standardized data formats for the images scanned or to be printed.
-
-
-
-Current Linux distributions already support the printing part via IPP and there is also already upstream code for scanning via AirScan (eSCL) to appear in the distributions soon and the open IPP Scan standard is subject of another project in this GSoC. Also the standard for device configuration (IPP System Service) is subject of other projects in this GSoC list.
-
-
-
-What is missing is IPP Fax out. This is a standard, very similar to driverless IPP printing for sending faxes. Principally sending a fax can be done by printing a file to a special destination in the device, accompanied with a phone number (required) and some fax-specific options (like how to proceed on failure or cover sheets, …) as IPP attributes.
-
-
-
-One can easily determine whether a device supports this and poll all needed capabilities. The DNS-SD record of the device's printing part (“_ipp._tcp”) does not report only the URI extension for printing (“rp=ipp/print”) but also for fax (“rfo=ipp/faxout”, no extra DNS-SD record!). If there is such an entry one can poll the URI “ipp://host:port/ipp/faxout” with a get-printer-attributes IPP request as it was a printer, and one gets the capabilities for the device-internal fax destination. The “driverless” utility of cups-filters happily generates a PPD from this, but naturally without fax-specific options, and if you create a CUPS queue with this URI and PPD and print a file with “lp -d queue -o phone=0012345678 file” the device will fax the file to the given number. The feature is commonly available in modern devices and I have actually tested it as described here.
-
-
-
-The student's task here is to make this functionality easily accessible for users of common desktop Linux distributions. Like printers, faxes should automatically appear on the system and get available in print dialogs and if one prints to a fax, fax-specific options should also appear in the print dialog and the user should be able to pick phone numbers also from contacts.
-
-
-
-This can be done by expanding existing resources and creating new ones in the printing stack. Especially one should think here abour the Common Print Dialog Backends (CPDB), but also other projects, like cups-filters would perhaps need changes.
-
-
-### Mentors
-
-Nilanjana Lodh, first implementor of the CPDB (nilanjanalodh at gmail dot com), Dongxu Li (dongxuli2011 at gmail dot com), Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), TBD
-
-
-### Desired knowledge
-
-C/C++ programming, CUPS, IPP
-
-
-### Licenses
-
-MIT, Apache, GPL 2+
-
\ No newline at end of file
diff --git a/_gsoc2020/12-scp-dbus-service-into-c.md b/_gsoc2020/12-scp-dbus-service-into-c.md
deleted file mode 100644
index 55d781c7..00000000
--- a/_gsoc2020/12-scp-dbus-service-into-c.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-title: "Turn the scp-dbus-service methods - GetBestDrivers and MissingExecutables - of system-config-printer into C"
----
-
-### Introduction
-
-system-config-printer was the default printer setup tool in Red Hat/Fedora Linux for a lot of time and also got adopted by Ubuntu around ten years ago. During this time it received a lot of development work, especially on the algorithms for finding the best driver for a printer and for identifying whether printer discovery results from the CUPS backends actually come from the same physical printer.
-
-
-
-To make these algorithms available for other printer setup tools (both interactive GUI tools and programs which fully automatically create print queues without user interaction) they got moved into a D-Bus service, scp-dbus-service. Now every other program can simply call the needed function via a D-Bus API. The printer setup tool in the GNOME Control Center for example works this way.
-
-
-
-GNOME Control Center uses two methods - GetBestDrivers and MissingExecutables - for its printer setup. The GetBestDrivers method is used for finding the right printer drivers from ones which are available on the system. The MissingExecutables method is checking method, which is run after finding the best driver and checks if any additional software is needed for getting the printer functional.
-
-
-
-system-config-printer was written in Python and therefore scp-dbus-service is also written in Python. This makes it depending on Python and also makes it loading the needed Python libraries into memory when started. Also most printer setup tools are written in C, Therefore it makes sense to convert the D-Bus service into the C language.
-
-
-
-The student's task is to turn the two mentioned methods of system-config-printer into C, first as a C library with API, then as a D-Bus service (would
- work out-of-the-box with many GUIs) if the C library will be finished. This will make it easier to use those methods in other print tools in practically any programming language.
-
-
-### Mentors
-
-Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), system-config-printer upstream developer Zdenek Dohnal (zdohnal at redhat dot com)
-
diff --git a/_gsoc2020/14-roll-paper-support.md b/_gsoc2020/14-roll-paper-support.md
deleted file mode 100644
index a30865e8..00000000
--- a/_gsoc2020/14-roll-paper-support.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: "Real roll paper support in cups-filters"
----
-
-### Introduction
-
-Currently, most probably due to the fact that once most printers use paper in cut sheet and also PPD (PostScript Printer Description, now deprecated) files only support paper in cut sheet, roll paper as used in large-format and also some specialty prrinters is not actually supported.
-
-
-
-The difference of roll paper against sheet paper is that only its width is defined, the height of the printing area can be selected individually for each print job.
-
-
-
-What the user expects to happen is that the paper is cut right after the page so that nothing is wasted and the user has minimum work with manual cutting. He also would like pages to be rotated by 90 degrees if they fit better this way, for example if the page height fits into the roll's width. This saves paper and allows pages which are too wide for the roll to be printed. An option to activate this (auto), never rotate, or always rotate should be added.
-
-
-
-Also some way to manage paper consumption and preventing a page being started which does not fit into the remaining paper is desired.
-
-
-
-The student's task is to add this functionality into the current print workflow.
-
-
-
-He should at first study the IPP (Internet Printing Protocol) standard for its roll paper support. Then he should check where changes are needed: in CUPS, cups-filters, print dialogs … Also it has to be investigated whether this can be completely implemented in the current (deprecated) PPD-based printing workflow or whether the new Printer-Application-based model is required.
-
-
-### Mentors
-
-Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), TBD
-
-MuPDF is a lightweight PDF renderer made by Artifex, the company behind Ghostscript. In contrary to Ghostscript, MuPDF is a pure PDF renderer. It does not contain a PostScript interpreter nor parts of it are written in PostScript. This makes it smaller, faster, and less resource-consuming, the ideal solution for mobile devices like tablets or smartphones.
-
-
-
-On mobile devices printing will not be done with having tons of printer-model-specific drivers on the system. Once, they consume the limited mass storage space, and second, one uses the mobile device in several different local networks with different printers: At home, in the office, in a copy shop, … and one wants to use the printers which are available there, without installing drivers and setting up queues.
-
-
-
-Therefore we want to have a system which automatically detects network printers and makes them available for local apps. To do so we restrict ourselves to printers with known, common languages: IPP Everywhere/AirPrint/Mopria/W-Fi Direct (driverless printing standards, using PWG Raster, Apple Raster, PCLm, and PDF) and PostScript, PDF, PCL 5c/e/6/XL (legacy standards). So MuPDF has to generate raster output for these languages, meaning raster embedded in the specifics of the language, and to avoid exhausting printer resources raster in small bands and no high-level output, even if the printer language is high-level.
-
-
-
-Artifex will also work on this, but to get additional man power we are also opening this project for students.
-
-
-
-Note that you have to assign copyright on your code to Artifex, as otherwise the code cannot be integrated in MuPDF.
-
-
-
-This project can be split to be worked on by more than one student.
-
-
-### Mentors
-
-MuPDF developers TBD, Till Kamppeter, Project Leader OpenPrinting (till at linux dot com)
-
-
-### Desired knowledge
-
-C and/or C++ programming
-
-
-### Code License
-
-GPL
-
diff --git a/_gsoc2020/16-print-files-directly-from-manager.md b/_gsoc2020/16-print-files-directly-from-manager.md
deleted file mode 100644
index fb59bb9b..00000000
--- a/_gsoc2020/16-print-files-directly-from-manager.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: "Printing of files directly from the file manager"
----
-
-### Introduction
-
-Sometimes you browse through your files and see some files which you want to print, files in completely different formats: PDFs, photos, LibreOffice files, … It is awkward to double-click each file, one-by-one, to get it opened in its application, and then click “Print” in each application. It would be much easier to mark all these files, right-click and then click “Print” in the context menu.
-
-
-
-Here the student's task is to add this functionality to a popular file manager, for example the one of GNOME.
-
-
-### Mentors
-
-Aveek Basu (basu dot aveek at gmail dot com), upstream developers of GNOME/GTK TBD.
-
-The cairo and inskcape code is pushed upstream with any required modifications. Ideally someone familiar with the cairo community would take this on, as Adrian found it hard to get the code approved upstream.
-
-
-### Required Skills
-
-Understanding of basic color management, basic use of bzr and git, proficient in C.
-
-With sandboxed packaging, Linux distributions appear which do not use classic RPM or DEB packages any more, like the all-Snap Ubuntu Core. As a result CUPS will not work with classic PPD/filter-based printer drivers any more but requires all drivers being provided as Printer Applications. The student's task is to add this functionality to the Printer Application framework and create an easy way for users to install proprietary printer drivers into that chroot-equipped Printer Application.
-
-
-### Mentors
-
-Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Aveek Basu, Project Manager (basu dot aveek at gmail dot com)
-
-
-### Desired Knowledge
-
-C programming, C++ programming, Python Programming
-
-IPP Fax out is a feature which is currently missing in Linux unlike Print and Scan. The student's task here is to make this functionality easily accessible for users of common desktop Linux distributions. Like printers, faxes should automatically appear on the system and get available in print dialogs and if one prints to a fax, fax-specific options should also appear in the print dialog and the user should be able to pick phone numbers also from contacts.
-
-
-### Mentors
-
-Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Aveek Basu, Project Manager (basu dot aveek at gmail dot com)
-
-The Internet Printing Protocol (IPP) does not only support printing, but also scanning, as there are many printers which also have a scanner (multi-function (MF) devices). Both CUPS and the developer tool ippserver emulate IPP network printers but not IPP scanners and so they cannot serve as a server to share a local scanner.
-
-
-
-This task is about adding the scan server functionality. If you have a scanner connected locally (and it scans via SANE), share it as an IPP scanner, advertising itself and accepting jobs using the IPP driverless scanning standard. In contrary to SANE-based network scanning clients with any operating system, also phones or IoT devices can scan on your shared scanner.
-
-
-
-Also old hardware can be recycled to a modern MF device.
-
-
-
-This server software will be a so-called Scanner Application, a sample implementation of the future form of scanner drivers, easily packageable in sandboxed, distribution-independent package formats like Snap.
-
-
-### Mentors
-
-Alexander Pevzner, “airscan” SANE backend author (pzz at apevzner dot com), Michael Sweet, author of CUPS (msweet at msweet dot org), Till Kamppeter, Project Leader OpenPrinting (till at linux dot com), Aveek Basu, Project Manager (basu dot aveek at gmail dot com)
-
-
-### Desired Knowledge
-
-C programming, C++ programming, Printing
-
-
-### Code License
-
-Apache 2.0
-
diff --git a/_pages/contact.md b/_pages/contact.md
deleted file mode 100644
index 71624e96..00000000
--- a/_pages/contact.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: "Contact Us"
-permalink: /contact/
-layout: collection
-header:
- overlay_color: "#000"
- overlay_filter: "0.5"
- overlay_image: /assets/images/contact_us.jpeg
-excerpt: "Feel Free To Contact Us!"
-author_profile: false
----
-## Our Mailing lists
-We protect the e-mail addresses of our mailing lists against spam bots. Please replace all occurrences of “ at ” and “ dot ” by “@” and “.” resp.
-
-- **Development:** printing-architecture AT lists DOT linux DOT dev ([Archive](https://lore.kernel.org/printing-architecture/))
-- **Users:** printing-users AT lists DOT linux DOT dev ([Archive](https://lore.kernel.org/printing-users/))
-
-Subscribing/Unsubscribing [instructions](https://subspace.kernel.org/subscribing.html)
-
-## Telegram
-- Main chat room: [OpenPrinting](https://t.me/+RizBbjXz4uU2ZWM1)
-
-## Mastodon
-- [#OpenPrinting](https://ubuntu.social/tags/OpenPrinting)
-- [@till@ubuntu.social](https://ubuntu.social/@till)
-
-## LinkedIn
-- [@OpenPrinting](https://www.linkedin.com/company/openprinting/posts/)
diff --git a/_pages/driverless.md b/_pages/driverless.md
deleted file mode 100644
index 4a0d9ab7..00000000
--- a/_pages/driverless.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-layout: collection
-title: "Driverless Printing"
-permalink: /driverless/
-author_profile: false
-sidebar:
- - image: /assets/images/logo _ipp.png
- image_alt: "Driverless Printing"
- nav: "driverless"
----
-
Introduction-:
-
Driverless Printing means that to be able to print on a given printer no software or data specific to that printer model needs to be installed on the client. The client should even be able to print on printers which did not exist yet when the client's software was released. The printer must use known page description languages and must inform the client about its capabilities on request.
-
There exist a variety of methods for a client to submit a job to a printing system and print driverlessly-:
-
-
Print directly from an application on the client.
-
Use AirPrint or IPP Everywhere printing.
-
Send the job as an email attachment to a special address.
-
Web print. The document is uploaded from a web browser via a web form style interface.
-
-
-
Importance-:
-
Driverless printing is especially important for Linux and similar operating systems as they are often not explicitly supported by the manufacturers supplying drivers for them. Originally the driverless printing standards were created to allow smartphones, tablets, and similar mobile devices to print, as these come with several different and new operating systems. Even very cheap printers do driverless printing (people want to print from phones), so it is easy to get a printer for Linux nowadays.
-Important: We protect the e-mail addresses of our mentors and mailing lists against spam bots. Please replace all occurrences of “ at ” and “ dot ” by “@” and “.” resp.
-
-The participation of the Linux Foundation in the Google Summer of Code is organized by Till Kamppeter (till at linux dot com) and Aveek Basu (basu dot aveek at gmail dot com).
-
-
-
-
-
-Please see the plans for our near future work to get an overview of our development direction and architecture changes.
-
1. Extract raster data from PDFs for direct printing
-
Student: Vikrant Malik Mentors: Sahil Arora, Till Kamppeter
- Work Product
-
PASSED
-
-
-
2. General Printer Application SDK
-
Student: Jai Luthra Mentors: Mentors: Michael Sweet, Till Kamppeter
- Work Product
-
PASSED
- Jai has principally worked on PAPPL but also done an HP PCL sample Printer Application. In the end he has also worked on converting filters of cups-filters into filter functions.
-
-
-
3. Linux GUI application to admin MF devices using IPP System Service
-
Student: Lakshay Bandlish Mentor: Michael Sweet
- Work Product
-
PASSED
-
-
-
4. Make Printer Applications Configurable
-
Student: Sambhav Dusad Mentor: Michael Sweet
- Work Product
-
PASSED
-
- Sambhav has also started to create a Gutenprint Printer Application.
-
-
-
-
-
-
5. Speed/Scaling Optimisation of cups-browsed
-
Student: Mohit Mohan Mentors: Deepak Patankar, Till Kamppeter
- Work Product
-
PASSED
-
-
-
6. Common Print Dialog Backends (CPDB) Qt ImplementationPermalink
-
Student: Priydarshi Singh Mentor: Dongxu Li
- Work Product
-
FAILED(final evaluation)
- We are looking into finishing up CPDB after GSoC.
-
-
-
7. IPP Scan (or virtual MF device) server (Scanner Application)Permalink
-
Student: Aakash Lahoti Mentors: Michael Sweet, Alexander Pevzner
-
- WITHDRAWN (shortly after first evaluation)
-
- We have replaced this project by a 2-student LFMP project (see here).
-
+ OpenPrinting participates in GSoC under The Linux Foundation,
+ mentoring contributors on printing infrastructure, desktop
+ integration, and open-source development.
+
+
+ )}
+
+ )
+}
\ No newline at end of file
diff --git a/app/hall-of-fame/page.tsx b/app/hall-of-fame/page.tsx
new file mode 100644
index 00000000..e96145fb
--- /dev/null
+++ b/app/hall-of-fame/page.tsx
@@ -0,0 +1,101 @@
+import type { Metadata } from "next"
+import Link from "next/link"
+import { ArrowRight, Github } from "lucide-react"
+
+import ContributorsSection from "@/components/contributors-section"
+import { PageHero } from "@/components/page-hero"
+import { siteConfig } from "@/config/site.config"
+import { getSiteUrl } from "@/lib/site"
+
+const title = "This Website's Hall of Fame | OpenPrinting"
+const description =
+ "The people who rebuilt the OpenPrinting website — the contributors behind the new static Next.js site."
+
+const ANNOUNCEMENT_PATH = "/OpenPrinting-News-The-New-OpenPrinting-Website"
+
+export const metadata: Metadata = {
+ title,
+ description,
+ alternates: { canonical: getSiteUrl("/hall-of-fame/") },
+ openGraph: {
+ title,
+ description,
+ url: getSiteUrl("/hall-of-fame/"),
+ type: "website",
+ },
+}
+
+export default function HallOfFamePage() {
+ return (
+ <>
+
+
+
+
+
+
+ Website Contributors
+
+
+ Built from the ground up by the community
+
+
+ The OpenPrinting website was rebuilt from scratch as a fast, fully static
+ site that is easier to contribute to and now hosts the printer and driver
+ database directly. This page recognizes the contributors who made that
+ rebuild happen — read the full story in the announcement post.
+
+
+
+ Read the announcement
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Want to join them?
+
+
+ OpenPrinting is an open-source community, and there is always more to do.
+ Find out how to get involved, or browse the source on GitHub.
+