An on-going photographic documentation of the people behind the development and advancement of open source software in Uzbekistan.
Live Site: facesofopensource.uz
Inspired by Faces of Open Source by Peter Adams.
- Celebrate the Uzbek open source community
- Document the people behind the code
- Inspire the next generation of contributors
- Build visibility for open source work in Central Asia
foss.uz/
βββ index.html # Home page with portrait gallery
βββ about.html # About the project
βββ submit.html # Submission form for nominations
βββ contact.html # Contact information
βββ person.html # Template for individual person pages
βββ css/
β βββ style.css # Main stylesheet
βββ js/
β βββ main.js # Main JavaScript
β βββ submit.js # Form submission handling
β βββ person.js # Person detail page logic
βββ data/
β βββ people.json # Data for all featured people
βββ media/
β βββ portraits/ # Portrait photos (store in GitHub)
βββ README.md
-
Clone this repository:
git clone https://github.com/acuere/foss.uz.git cd foss.uz -
Start a local web server:
# Using Python 3 python3 -m http.server 8000 # Using Node.js npx serve # Using PHP php -S localhost:8000
-
Open your browser to
http://localhost:8000
-
Connect your repository:
- Go to Cloudflare Pages
- Click "Create a project"
- Connect your GitHub account
- Select the
foss.uzrepository
-
Configure build settings:
- Framework preset: None (or Static HTML)
- Build command: (leave empty)
- Build output directory:
/ - Root directory:
/
-
Deploy:
- Click "Save and Deploy"
- Your site will be live in minutes!
-
Custom Domain:
- Go to your project settings
- Click "Custom domains"
- Add
facesofopensource.uz - Update your DNS records as instructed
- Take a high-quality portrait photo
- Prefer black and white or convert to grayscale
- Recommended size: 1200x1600px (3:4 aspect ratio)
- Format: JPG
- Save to
media/portraits/firstname-lastname.jpg
Add a new entry to data/people.json:
{
"id": "firstname-lastname",
"name": "First Last",
"title": "Role or Project",
"image": "media/portraits/firstname-lastname.jpg",
"story": "Write the person's story here. Include their journey into open source, contributions, and impact.\n\nUse \\n\\n for new paragraphs.",
"links": [
{
"title": "GitHub",
"url": "https://github.com/username"
},
{
"title": "Website",
"url": "https://example.com"
}
]
}git add media/portraits/firstname-lastname.jpg data/people.json
git commit -m "Add [Person Name]"
git push origin mainCloudflare Pages will automatically deploy your changes!
- Community members submit nominations via the form on
/submit.html - Submissions create GitHub Issues automatically (when configured)
- Review and reach out to the nominee
- Schedule photoshoot and interview
- Add person to the site following the steps above
Edit CSS variables in css/style.css:
:root {
--color-bg: #ffffff;
--color-text: #1a1a1a;
--color-gray: #666666;
--color-accent: #000000;
}Change fonts in the :root section:
:root {
--font-main: -apple-system, BlinkMacSystemFont, "Segoe UI", ...;
--font-heading: "Helvetica Neue", Helvetica, Arial, ...;
}The website now supports two submission methods:
When users select "GitHub PR" on the submission form, they'll be redirected to create a GitHub issue with pre-filled content. This allows community review and discussion.
To enable:
- Issues are already enabled by default on GitHub repositories
- Issue template is at
.github/ISSUE_TEMPLATE/nomination.md - No additional setup required!
When users select "Email", their default email client opens with a pre-filled message to t.ibrokhims@gmail.com.
To set up email:
- Configure email forwarding for
t.ibrokhims@gmail.com - Or update the email address in
js/submit.js
Add these secrets to your GitHub repository (Settings β Secrets and variables β Actions):
-
CLOUDFLARE_API_TOKEN
- Go to Cloudflare API Tokens
- Create token with "Cloudflare Pages β Edit" permissions
- Add as GitHub secret
-
CLOUDFLARE_ACCOUNT_ID
- Go to Cloudflare Dashboard
- Copy Account ID from the right sidebar
- Add as GitHub secret
Once secrets are configured:
- Every push to
maintriggers automatic deployment - Pull requests get preview deployments
- Deployments complete in ~1 minute
To automatically create GitHub Issues from form submissions:
- Create a GitHub Personal Access Token with
reposcope - Use a serverless function (Cloudflare Workers) to handle submissions
- Update
js/submit.jsto call your worker endpoint
Example Cloudflare Worker:
export default {
async fetch(request, env) {
if (request.method !== 'POST') {
return new Response('Method not allowed', { status: 405 });
}
const data = await request.json();
const response = await fetch('https://api.github.com/repos/acuere/foss.uz/issues', {
method: 'POST',
headers: {
'Authorization': `token ${env.GITHUB_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
title: `New Nomination: ${data.nomineeName}`,
body: formatIssueBody(data),
labels: ['nomination']
})
});
return response;
}
}This project structure and code are released under the MIT License. Individual portrait photos and stories remain the copyright of their respective subjects and the photographer.
We welcome contributions! Here's how you can help:
- Submit nominations for people to feature
- Improve the code - submit PRs for bug fixes or enhancements
- Share the project within the Uzbek tech community
- Translate content to Russian or Uzbek
- Website: facesofopensource.uz
- Email: t.ibrokhims@gmail.com
- GitHub: github.com/acuere/foss.uz
- Telegram Community: @flossuzc
Inspired by Faces of Open Source by Peter Adams.
Built with β€οΈ for the Uzbek open source community