diff --git a/README.md b/README.md
index b26b03e6..19d26824 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,90 @@
-
+
-# Paweł Kosiec - Personal Website
+# P Foundation
-This repository contains source code of the Paweł Kosiec's personal website. To see it live, navigate to the [kosiec.dev](https://kosiec.dev) address.
+**Empowering nations with open internet and free journalism.**
+
+P Foundation is a 501(c)(3) non-profit corporation registered in Washington, DC, dedicated to bridging the digital divide and promoting open access to information worldwide. Established in 2021, we serve the global community with a focused commitment to the Middle East and Lebanon, where the need for open internet and free journalism is crucial.
+
+## Our Mission
+
+At the core of our foundation lies the ethos that an open internet and free journalism form the backbone of every progressive nation, binding societies with threads of transparency, accountability, and uninhibited expression. We envision a world where every individual, irrespective of their location or background, has unhindered access to the vast reservoirs of knowledge and information the internet has to offer.
+
+## Our Values
+
+Our work is guided by four core principles:
+
+- **Patriotism**: We fuel our drive to serve the nations we operate in, ensuring that the benefits of our efforts are felt at every grassroots level.
+- **Passion**: Our passion for an open internet propels us forward, driving us to challenge the status quo and break down barriers.
+- **Persistence**: This helps us overcome challenges, ensuring that we remain committed to our goals no matter the hurdles.
+- **Partnership**: Our belief in global partnerships stems from understanding that collaborative efforts amplify impact. By forging alliances with like-minded entities, we strive to achieve collective success that benefits all.
+
+## Background & Rationale
+
+The P Foundation emerged from a profound belief in the power of media and the transformative capabilities of technology. Founded during a period of significant challenges in the Middle East, particularly in Lebanon where internet access had become a political bargaining chip and infrastructure was crumbling, we recognized the urgent need for sustainable solutions.
+
+Our founder's journey from developer to media professional, combined with exposure to newsrooms and understanding of both technical and communications challenges, laid the foundation for our comprehensive approach to digital empowerment.
+
+## Current Programs
+
+### MediaGuard
+
+Designed to bolster media organizations globally, MediaGuard extends tailored support ensuring they maintain a consistent and uninterrupted media presence. Services include backhaul support, downlinking, digital streaming, and content distribution.
+
+**Contact**: mediaguard@p.foundation
+
+### CitizenMesh
+
+A community-led initiative that empowers communities to build and maintain their own reliable internet connections. We focus on key communal spaces such as educational institutions, public libraries, and public spaces, offering free internet access as a cornerstone for enhancing public life.
+
+**Contact**: cmp@p.foundation
+
+### ResilientNet
+
+A specialized extension of CitizenMesh aimed at providing robust internet connectivity to critical installations essential for public well-being, including healthcare institutions, emergency services, and utility facilities.
+
+## Future Plans & Roadmap to 2027
+
+Our strategic goals include:
+
+### Expanding Partnerships
+
+Increasing the number of beneficiaries by adding more organizations to our MediaGuard initiative, offering personalized support and dedicated points of contact for smoother transitions.
+
+### Strengthening Citizen-Focused Programs
+
+Deepening partnerships with organizations that have significant grassroots experience and direct impact on citizens' lives, providing enhanced tools and support.
+
+### Forward Deployed Software Engineer Model
+
+Developing a structured program to train software engineers in rapid problem-solving and effective integration, addressing the talent gap in the Middle East.
+
+### Program Enhancement
+
+Leveraging advancements in machine learning and technology to accelerate development processes and introduce new functionalities to better serve our partners.
+
+## Key Contributors & Leadership
+
+- **Jud**: Founder and primary architect of the foundation's vision and strategy
+- Our dedicated team of volunteers who employ systematic approaches to assess connectivity needs and expand services
+- Various partner organizations and stakeholders who collaborate on initiatives
+
+## Documentation & References
+
+- [Roadmap to 2027](./messages/2024-03-31-roadmap_to_2027.md) - Our strategic vision and goals
+- [Code of Conduct](./src/pages/coc.md) - Our principles and standards
+- [Foundation Website](https://p.foundation) - Complete information about our work
+- [AS399728 Network Information](https://p.foundation/as399728) - Our network peering details
+
+## Getting Involved
+
+We welcome contributions from external stakeholders and the community at large. Whether you're a media organization seeking support, a community looking for connectivity solutions, or an individual interested in our mission, we encourage you to reach out.
+
+For general inquiries: [Contact us through our website](https://p.foundation)
+
+---
## Development
@@ -12,26 +92,37 @@ This website is built using [Docusaurus 2](https://docusaurus.io/), a modern sta
### Installation
-```
-$ npm install
+```bash
+npm install
```
### Local Development
-```
-$ npm start
+```bash
+npm start
```
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
### Build
-```
-$ npm run build
+```bash
+npm run build
```
This command generates static content into the `build` directory and can be served using any static contents hosting service.
+### Testing
+
+```bash
+npm run lint
+npm run typecheck
+```
+
### Deployment
This site is deployed automatically from the `main` branch using [Cloudflare Pages](https://pages.cloudflare.com/).
+
+---
+
+_Together, as we navigate the challenges and opportunities of the digital age, the P Foundation stands as a beacon of hope, dedication, and unwavering commitment to a brighter, more informed, and interconnected world._
diff --git a/src/components/homepage/AboutMe.js b/src/components/homepage/AboutMe.js
new file mode 100644
index 00000000..a091dcae
--- /dev/null
+++ b/src/components/homepage/AboutMe.js
@@ -0,0 +1,37 @@
+'use strict';
+Object.defineProperty(exports, '__esModule', { value: true });
+exports.AboutMe = void 0;
+var react_1 = require('react');
+var clsx_1 = require('clsx');
+var AboutMe_module_scss_1 = require('./AboutMe.module.scss');
+var AboutMe = function (_a) {
+ var avatar = _a.avatar,
+ descriptionComponent = _a.descriptionComponent;
+ return react_1.default.createElement(
+ 'div',
+ { className: 'margin-top--lg' },
+ react_1.default.createElement('h2', null, 'About us'),
+ react_1.default.createElement(
+ 'div',
+ { className: 'row' },
+ react_1.default.createElement(
+ 'div',
+ { className: 'col col--9' },
+ descriptionComponent
+ ),
+ react_1.default.createElement(
+ 'div',
+ {
+ className: (0, clsx_1.default)(
+ 'col col--2',
+ AboutMe_module_scss_1.default.avatarContainer
+ ),
+ },
+ react_1.default.createElement('div', {
+ className: AboutMe_module_scss_1.default.avatar,
+ })
+ )
+ )
+ );
+};
+exports.AboutMe = AboutMe;
diff --git a/src/components/homepage/Hero.js b/src/components/homepage/Hero.js
new file mode 100644
index 00000000..0a068814
--- /dev/null
+++ b/src/components/homepage/Hero.js
@@ -0,0 +1,56 @@
+'use strict';
+Object.defineProperty(exports, '__esModule', { value: true });
+exports.Hero = void 0;
+var clsx_1 = require('clsx');
+var react_1 = require('react');
+var Hero_module_scss_1 = require('./Hero.module.scss');
+var Hero = function () {
+ return react_1.default.createElement(
+ 'header',
+ {
+ className: (0, clsx_1.default)(
+ 'hero hero--primary',
+ Hero_module_scss_1.default.heroBanner
+ ),
+ },
+ react_1.default.createElement(
+ 'div',
+ { className: 'container' },
+ react_1.default.createElement(
+ 'h1',
+ {
+ className: (0, clsx_1.default)(
+ 'hero__title',
+ Hero_module_scss_1.default.title
+ ),
+ },
+ 'Empowering nations with',
+ ' ',
+ react_1.default.createElement(
+ 'span',
+ { className: Hero_module_scss_1.default.highlighted },
+ 'open internet'
+ ),
+ ' and',
+ ' ',
+ react_1.default.createElement(
+ 'span',
+ { className: Hero_module_scss_1.default.highlighted },
+ 'free journalism'
+ ),
+ '.'
+ ),
+ react_1.default.createElement(
+ 'p',
+ {
+ className: (0, clsx_1.default)(
+ 'hero__subtitle',
+ Hero_module_scss_1.default.subtitle
+ ),
+ },
+ 'Bridging the digital divide, the P Foundation is committed to connecting communities and fostering a world of informed, global collaboration.'
+ )
+ )
+ );
+};
+exports.Hero = Hero;
diff --git a/src/components/homepage/SocialLinks.js b/src/components/homepage/SocialLinks.js
new file mode 100644
index 00000000..dc90622e
--- /dev/null
+++ b/src/components/homepage/SocialLinks.js
@@ -0,0 +1,89 @@
+'use strict';
+Object.defineProperty(exports, '__esModule', { value: true });
+exports.SocialLinks = exports.defaultSocialLinkData = void 0;
+var clsx_1 = require('clsx');
+var react_1 = require('react');
+var SocialLinks_module_scss_1 = require('./SocialLinks.module.scss');
+exports.defaultSocialLinkData = [
+ {
+ name: 'GitHub',
+ url: 'https://github.com/pfoundation',
+ svg: react_1.default.createElement(
+ 'svg',
+ {
+ role: 'img',
+ viewBox: '0 0 24 24',
+ xmlns: 'http://www.w3.org/2000/svg',
+ },
+ react_1.default.createElement('title', null, 'GitHub'),
+ react_1.default.createElement('path', {
+ d: 'M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12',
+ })
+ ),
+ },
+ {
+ name: 'X',
+ url: 'https://x.com/pfoundation',
+ svg: react_1.default.createElement(
+ 'svg',
+ {
+ role: 'img',
+ viewBox: '0 0 24 24',
+ xmlns: 'http://www.w3.org/2000/svg',
+ },
+ react_1.default.createElement('title', null, 'Twitter'),
+ react_1.default.createElement('path', {
+ d: 'M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z',
+ })
+ ),
+ },
+];
+var SocialLinks = function (_a) {
+ var data = _a.data;
+ var socialLinksComponents = data.map(function (_a) {
+ var name = _a.name,
+ url = _a.url,
+ svg = _a.svg;
+ return react_1.default.createElement(
+ 'div',
+ {
+ className: (0, clsx_1.default)(
+ 'col',
+ SocialLinks_module_scss_1.default.col
+ ),
+ key: name,
+ },
+ react_1.default.createElement(
+ 'a',
+ {
+ href: url,
+ target: '_blank',
+ className: (0, clsx_1.default)(
+ 'button button--outline button--primary',
+ SocialLinks_module_scss_1.default.btn
+ ),
+ },
+ react_1.default.createElement(
+ 'span',
+ { className: SocialLinks_module_scss_1.default.btnIcon },
+ svg
+ )
+ )
+ );
+ });
+ return react_1.default.createElement(
+ 'div',
+ { className: SocialLinks_module_scss_1.default.socialContainer },
+ react_1.default.createElement(
+ 'div',
+ {
+ className: (0, clsx_1.default)(
+ 'row',
+ SocialLinks_module_scss_1.default.socialLinks
+ ),
+ },
+ socialLinksComponents
+ )
+ );
+};
+exports.SocialLinks = SocialLinks;
diff --git a/src/components/newsletter/Newsletter.js b/src/components/newsletter/Newsletter.js
new file mode 100644
index 00000000..0e9fd20a
--- /dev/null
+++ b/src/components/newsletter/Newsletter.js
@@ -0,0 +1,79 @@
+'use strict';
+Object.defineProperty(exports, '__esModule', { value: true });
+exports.Newsletter = void 0;
+var react_1 = require('react');
+var icon_news_svg_1 = require('./assets/icon-news.svg');
+var Newsletter_module_scss_1 = require('./Newsletter.module.scss');
+var Newsletter = function (_a) {
+ var data = _a.data;
+ var action = data.action,
+ method = data.method,
+ emailFieldName = data.emailFieldName,
+ firstNameFieldName = data.firstNameFieldName,
+ submitButtonName = data.submitButtonName,
+ tosURL = data.tosURL,
+ privacyPolicyURL = data.privacyPolicyURL,
+ serviceName = data.serviceName;
+ return react_1.default.createElement(
+ 'div',
+ { className: Newsletter_module_scss_1.default.newsWrapper },
+ react_1.default.createElement(
+ 'div',
+ { className: 'container padding-vert--lg' },
+ react_1.default.createElement(icon_news_svg_1.default, {
+ className: Newsletter_module_scss_1.default.newsIcon,
+ }),
+ react_1.default.createElement(
+ 'h2',
+ null,
+ 'Subscribe to updates about P Foundation\u2019s work'
+ ),
+ react_1.default.createElement(
+ 'form',
+ {
+ action: action,
+ className: Newsletter_module_scss_1.default.form,
+ method: method,
+ target: '_blank',
+ },
+ react_1.default.createElement('input', {
+ name: emailFieldName,
+ placeholder: 'Your email',
+ type: 'email',
+ required: true,
+ }),
+ react_1.default.createElement(
+ 'div',
+ {
+ style: { position: 'absolute', left: '-5000px' },
+ 'aria-hidden': 'true',
+ },
+ react_1.default.createElement('input', {
+ type: 'text',
+ name: 'b_4ed0fd1909674fddee53ac3e7_dfdcae99f5',
+ tabIndex: -1,
+ value: '',
+ })
+ ),
+ react_1.default.createElement(
+ 'button',
+ {
+ type: 'submit',
+ name: submitButtonName,
+ disabled: true,
+ className: 'button button--primary button--newsletter',
+ },
+ 'Subscribe'
+ )
+ ),
+ react_1.default.createElement(
+ 'div',
+ { className: Newsletter_module_scss_1.default.formFooter },
+ 'By entering your email address and clicking \u201CSubscribe\u201D, you agree to receive updates from the P Foundation about our work. ',
+ react_1.default.createElement('br', null),
+ 'To learn more about how we use and protect your personal data, please view our privacy policy.'
+ )
+ )
+ );
+};
+exports.Newsletter = Newsletter;
diff --git a/src/components/programs/Programs.js b/src/components/programs/Programs.js
new file mode 100644
index 00000000..97ef1caf
--- /dev/null
+++ b/src/components/programs/Programs.js
@@ -0,0 +1,220 @@
+'use strict';
+Object.defineProperty(exports, '__esModule', { value: true });
+var clsx_1 = require('clsx');
+var react_1 = require('react');
+var Programs_module_scss_1 = require('./Programs.module.scss');
+var icon_recording_svg_1 = require('./assets/icon-recording.svg');
+var icon_slides_svg_1 = require('./assets/icon-slides.svg');
+var icon_repository_svg_1 = require('./assets/icon-repository.svg');
+var icon_calendar_svg_1 = require('./assets/icon-calendar.svg');
+var icon_message_svg_1 = require('./assets/icon-message.svg');
+var icon_location_svg_1 = require('./assets/icon-location.svg');
+var Program = function (_a) {
+ var title = _a.title,
+ description = _a.description,
+ _b = _a.beneficiaries,
+ beneficiaries = _b === void 0 ? [] : _b,
+ recordingURL = _a.recordingURL,
+ slidesURL = _a.slidesURL,
+ repoURL = _a.repoURL,
+ applyURL = _a.applyURL;
+ return react_1.default.createElement(
+ 'div',
+ { className: 'col col--12' },
+ react_1.default.createElement(
+ 'div',
+ {
+ className: (0, clsx_1.default)(
+ 'card',
+ Programs_module_scss_1.default.card
+ ),
+ },
+ react_1.default.createElement(
+ 'div',
+ { className: 'card__header' },
+ react_1.default.createElement('h2', null, title)
+ ),
+ react_1.default.createElement(
+ 'div',
+ { className: 'card__body' },
+ react_1.default.createElement(
+ 'div',
+ { className: 'row' },
+ react_1.default.createElement(
+ 'div',
+ { className: 'col col--7' },
+ description
+ ),
+ react_1.default.createElement(
+ 'div',
+ {
+ className: (0, clsx_1.default)(
+ 'col col--5',
+ Programs_module_scss_1.default.eventDetailsContainer
+ ),
+ },
+ react_1.default.createElement(ProgramDetails, {
+ data: beneficiaries,
+ })
+ )
+ )
+ ),
+ react_1.default.createElement(
+ 'div',
+ { className: 'card__footer' },
+ react_1.default.createElement(
+ 'div',
+ { className: Programs_module_scss_1.default.buttons },
+ applyURL &&
+ react_1.default.createElement(
+ 'a',
+ {
+ href: applyURL,
+ target: '_blank',
+ className: 'button button--primary button--outline',
+ },
+ react_1.default.createElement(
+ 'span',
+ { className: 'button__icon' },
+ react_1.default.createElement(icon_message_svg_1.default, null)
+ ),
+ 'Apply'
+ ),
+ recordingURL &&
+ react_1.default.createElement(
+ 'a',
+ {
+ href: recordingURL,
+ target: '_blank',
+ className: 'button button--primary button--outline',
+ },
+ react_1.default.createElement(
+ 'span',
+ { className: 'button__icon' },
+ react_1.default.createElement(
+ icon_recording_svg_1.default,
+ null
+ )
+ ),
+ 'Watch recording'
+ ),
+ slidesURL &&
+ react_1.default.createElement(
+ 'a',
+ {
+ href: slidesURL,
+ target: '_blank',
+ className: 'button button--secondary button--outline',
+ },
+ react_1.default.createElement(
+ 'span',
+ { className: 'button__icon' },
+ react_1.default.createElement(icon_slides_svg_1.default, null)
+ ),
+ 'See slides'
+ ),
+ repoURL &&
+ react_1.default.createElement(
+ 'a',
+ {
+ href: repoURL,
+ target: '_blank',
+ className: 'button button--secondary button--outline',
+ },
+ react_1.default.createElement(
+ 'span',
+ { className: 'button__icon' },
+ react_1.default.createElement(
+ icon_repository_svg_1.default,
+ null
+ )
+ ),
+ 'See repository'
+ )
+ )
+ )
+ )
+ );
+};
+var ProgramDetails = function (_a) {
+ var data = _a.data;
+ if (data.length === 0) {
+ return null;
+ }
+ var firstProgram = data[0],
+ otherPrograms = data.slice(1);
+ var name = firstProgram.name,
+ location = firstProgram.location,
+ date = firstProgram.date;
+ return react_1.default.createElement(
+ 'div',
+ { className: 'row' },
+ react_1.default.createElement(
+ 'div',
+ { className: 'col col--12' },
+ react_1.default.createElement(
+ 'ul',
+ { className: Programs_module_scss_1.default.list },
+ react_1.default.createElement(
+ 'li',
+ null,
+ react_1.default.createElement(icon_message_svg_1.default, {
+ className: Programs_module_scss_1.default.icon,
+ }),
+ ' ',
+ react_1.default.createElement('strong', null, name)
+ ),
+ react_1.default.createElement(
+ 'li',
+ null,
+ react_1.default.createElement(icon_location_svg_1.default, {
+ className: Programs_module_scss_1.default.icon,
+ }),
+ ' ',
+ location
+ ),
+ react_1.default.createElement(
+ 'li',
+ null,
+ react_1.default.createElement(icon_calendar_svg_1.default, {
+ className: Programs_module_scss_1.default.icon,
+ }),
+ ' ',
+ date
+ )
+ )
+ ),
+ data.length > 1 &&
+ react_1.default.createElement(
+ 'div',
+ { className: 'col col--12' },
+ react_1.default.createElement(
+ 'p',
+ { className: 'margin--none' },
+ 'Current public beneficiaries'
+ ),
+ react_1.default.createElement(
+ 'ul',
+ null,
+ otherPrograms.map(function (_a) {
+ var name = _a.name,
+ location = _a.location,
+ date = _a.date;
+ return react_1.default.createElement(
+ 'li',
+ { key: name },
+ react_1.default.createElement('strong', null, name),
+ ' in ',
+ location,
+ ' since ',
+ date
+ );
+ })
+ )
+ )
+ );
+};
+function formatDateString(date) {
+ return ''.concat(date.getMonth() + 1, '/').concat(date.getUTCFullYear());
+}
+exports.default = Program;
diff --git a/src/components/projects/Project.js b/src/components/projects/Project.js
new file mode 100644
index 00000000..c2359542
--- /dev/null
+++ b/src/components/projects/Project.js
@@ -0,0 +1,128 @@
+'use strict';
+Object.defineProperty(exports, '__esModule', { value: true });
+exports.Project = void 0;
+var clsx_1 = require('clsx');
+var react_1 = require('react');
+var IdealImage_1 = require('@theme/IdealImage');
+var icon_discover_svg_1 = require('./assets/icon-discover.svg');
+var icon_x_svg_1 = require('./assets/icon-x.svg');
+var icon_youtube_svg_1 = require('./assets/icon-youtube.svg');
+var Project_module_scss_1 = require('./Project.module.scss');
+var Project = function (_a) {
+ var title = _a.title,
+ description = _a.description,
+ url = _a.url,
+ x = _a.x,
+ youtube = _a.youtube,
+ role = _a.role,
+ image = _a.image;
+ return react_1.default.createElement(
+ 'div',
+ {
+ className: (0, clsx_1.default)(
+ 'col col--6',
+ Project_module_scss_1.default.cardContainer
+ ),
+ },
+ react_1.default.createElement(
+ 'div',
+ {
+ className: (0, clsx_1.default)(
+ 'card',
+ Project_module_scss_1.default.card
+ ),
+ },
+ react_1.default.createElement(
+ 'div',
+ {
+ className: (0, clsx_1.default)(
+ 'card__image',
+ Project_module_scss_1.default.image
+ ),
+ },
+ react_1.default.createElement(IdealImage_1.default, {
+ img: image,
+ alt: description,
+ title: title,
+ }),
+ role &&
+ react_1.default.createElement(
+ 'span',
+ {
+ className: (0, clsx_1.default)(
+ 'badge badge--secondary',
+ Project_module_scss_1.default.role
+ ),
+ },
+ role
+ )
+ ),
+ react_1.default.createElement(
+ 'div',
+ { className: 'card__body' },
+ react_1.default.createElement('h2', null, title),
+ react_1.default.createElement('p', null, description)
+ ),
+ react_1.default.createElement(
+ 'div',
+ { className: 'card__footer' },
+ react_1.default.createElement(
+ 'div',
+ { className: Project_module_scss_1.default.buttons },
+ url &&
+ react_1.default.createElement(
+ 'a',
+ {
+ href: url,
+ target: '_blank',
+ className: 'button button--primary button--outline',
+ },
+ react_1.default.createElement(
+ 'span',
+ { className: 'button__icon' },
+ react_1.default.createElement(icon_discover_svg_1.default, {
+ className: Project_module_scss_1.default.icon,
+ })
+ ),
+ 'Discover'
+ ),
+ x &&
+ react_1.default.createElement(
+ 'a',
+ {
+ href: 'https://twitter.com/'.concat(x),
+ target: '_blank',
+ className: 'button button--primary button--outline',
+ },
+ react_1.default.createElement(
+ 'span',
+ { className: 'button__icon' },
+ react_1.default.createElement(icon_x_svg_1.default, {
+ className: Project_module_scss_1.default.icon,
+ })
+ ),
+ x
+ ),
+ youtube &&
+ react_1.default.createElement(
+ 'a',
+ {
+ href: 'https://youtube.com/@'.concat(x),
+ target: '_blank',
+ className: 'button button--primary button--outline',
+ },
+ react_1.default.createElement(
+ 'span',
+ { className: 'button__icon' },
+ react_1.default.createElement(icon_youtube_svg_1.default, {
+ className: Project_module_scss_1.default.icon,
+ })
+ ),
+ youtube
+ )
+ )
+ )
+ )
+ );
+};
+exports.Project = Project;
diff --git a/src/pages/index.js b/src/pages/index.js
new file mode 100644
index 00000000..7b9935d7
--- /dev/null
+++ b/src/pages/index.js
@@ -0,0 +1,32 @@
+'use strict';
+Object.defineProperty(exports, '__esModule', { value: true });
+var react_1 = require('react');
+var useDocusaurusContext_1 = require('@docusaurus/useDocusaurusContext');
+var Layout_1 = require('@theme/Layout');
+var AboutMe_1 = require('../components/homepage/AboutMe');
+var Hero_1 = require('../components/homepage/Hero');
+//import avatar from "./assets/index/avatar.jpg";
+var _about_md_1 = require('./assets/index/_about.md');
+function Home() {
+ var siteConfig = (0, useDocusaurusContext_1.default)().siteConfig;
+ return react_1.default.createElement(
+ Layout_1.default,
+ { title: 'Home', description: siteConfig.tagline },
+ react_1.default.createElement(Hero_1.Hero, null),
+ react_1.default.createElement(
+ 'main',
+ null,
+ react_1.default.createElement(
+ 'div',
+ { className: 'container padding-vert' },
+ react_1.default.createElement(AboutMe_1.AboutMe, {
+ descriptionComponent: react_1.default.createElement(
+ _about_md_1.default,
+ null
+ ),
+ })
+ )
+ )
+ );
+}
+exports.default = Home;
diff --git a/src/pages/initiatives.js b/src/pages/initiatives.js
new file mode 100644
index 00000000..0d7abb6b
--- /dev/null
+++ b/src/pages/initiatives.js
@@ -0,0 +1,83 @@
+'use strict';
+var __assign =
+ (this && this.__assign) ||
+ function () {
+ __assign =
+ Object.assign ||
+ function (t) {
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
+ s = arguments[i];
+ for (var p in s)
+ if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+ }
+ return t;
+ };
+ return __assign.apply(this, arguments);
+ };
+Object.defineProperty(exports, '__esModule', { value: true });
+var react_1 = require('react');
+var Layout_1 = require('@theme/Layout');
+var Project_1 = require('../components/projects/Project');
+var assetsDir = './assets/initiatives';
+var projects = [
+ {
+ title: 'LebanonAlerts',
+ description:
+ 'Established in the wake of the 6 February 2023 Turkey-Syria earthquake, "Lebanon Alerts" is a X account committed to bridging the information gap experienced by the Lebanese populace. Born from the pressing need for transparency and timely updates, the account integrates with Raspberry Shake and global seismographic networks, delivering real-time seismic activity reports. Additionally, a dedicated YouTube live stream offers a continuous visual of the seismographs, ensuring data transparency and public awareness.',
+ image: require(''.concat(assetsDir, '/placeholder.png')),
+ role: 'Active',
+ x: 'LebanonAlerts',
+ youtube: 'LebanonAlerts',
+ },
+ {
+ title: 'Lebanon IA Monitor',
+ description:
+ "A pivotal initiative aimed at maintaining transparency in Lebanon's internet landscape. Recognizing that ISPs often refrain from acknowledging outages, especially when attributed to maintenance or sourcing lapses, this platform diligently monitors internet access across various providers. Offering real-time outage reports, it harnesses data from diverse sources such as real-time traffic to partner websites/apps, RIPE Atlas, and a network of mobile devices strategically placed throughout Lebanon.",
+ image: require(''.concat(assetsDir, '/placeholder.png')),
+ role: 'Active',
+ x: 'LebanonIAMonitor',
+ },
+ {
+ title: 'PTUN',
+ description: '',
+ image: require(''.concat(assetsDir, '/placeholder.png')),
+ role: 'Active',
+ },
+ {
+ title: 'Open Reporting',
+ description: '',
+ image: require(''.concat(assetsDir, '/placeholder.png')),
+ role: 'Queued',
+ },
+ {
+ title: 'National Digital Archive',
+ description: '',
+ image: require(''.concat(assetsDir, '/placeholder.png')),
+ role: 'Queued',
+ },
+];
+var title = 'Initiaves';
+var description = 'Featured initiatives we are involved in.';
+function Projects() {
+ return react_1.default.createElement(
+ Layout_1.default,
+ { title: title, description: description },
+ react_1.default.createElement(
+ 'main',
+ { className: 'container container--fluid margin-vert--lg' },
+ react_1.default.createElement('h1', null, title),
+ react_1.default.createElement('p', null, description),
+ react_1.default.createElement(
+ 'div',
+ { className: 'row' },
+ projects.map(function (project) {
+ return react_1.default.createElement(
+ Project_1.Project,
+ __assign({ key: project.title }, project)
+ );
+ })
+ )
+ )
+ );
+}
+exports.default = Projects;
diff --git a/src/pages/programs.js b/src/pages/programs.js
new file mode 100644
index 00000000..a33efe29
--- /dev/null
+++ b/src/pages/programs.js
@@ -0,0 +1,91 @@
+'use strict';
+var __assign =
+ (this && this.__assign) ||
+ function () {
+ __assign =
+ Object.assign ||
+ function (t) {
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
+ s = arguments[i];
+ for (var p in s)
+ if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+ }
+ return t;
+ };
+ return __assign.apply(this, arguments);
+ };
+Object.defineProperty(exports, '__esModule', { value: true });
+var react_1 = require('react');
+var Layout_1 = require('@theme/Layout');
+var Programs_1 = require('../components/programs/Programs');
+var citizenMesh_md_1 = require('./assets/programs/citizenMesh.md');
+var mediaGuard_md_1 = require('./assets/programs/mediaGuard.md');
+var resilientNet_md_1 = require('./assets/programs/resilientNet.md');
+var programs = [
+ {
+ title: 'Media Guard',
+ description: react_1.default.createElement(mediaGuard_md_1.default, null),
+ beneficiaries: [
+ {
+ name: 'mediaguard@p.foundation',
+ location: 'Worldwide',
+ date: 'Open/Extended Deadline',
+ },
+ // {
+ // name: "NA",
+ // location: "NA",
+ // date: "XA",
+ // },
+ ],
+ applyURL: 'mailto:mediaguard@p.foundation',
+ },
+ {
+ title: 'Citizen Mesh',
+ description: react_1.default.createElement(citizenMesh_md_1.default, null),
+ beneficiaries: [
+ {
+ name: 'cmp@p.foundation',
+ location: 'Lebanon',
+ date: 'Open',
+ },
+ ],
+ applyURL: 'mailto:cmp@p.foundation',
+ },
+ {
+ title: 'ResilientNet',
+ description: react_1.default.createElement(resilientNet_md_1.default, null),
+ beneficiaries: [
+ {
+ name: 'resilient@p.foundation',
+ location: 'Lebanon',
+ date: 'Open',
+ },
+ ],
+ applyURL: 'mailto:resilient@p.foundation',
+ },
+];
+var title = 'Programs';
+var description = 'Current active programs';
+function Programs() {
+ return react_1.default.createElement(
+ Layout_1.default,
+ { title: title, description: description },
+ react_1.default.createElement(
+ 'main',
+ { className: 'container container--fluid margin-vert--lg' },
+ react_1.default.createElement('h1', null, title),
+ react_1.default.createElement('p', null, description),
+ react_1.default.createElement(
+ 'div',
+ { className: 'row' },
+ programs.map(function (programData) {
+ return react_1.default.createElement(
+ Programs_1.default,
+ __assign({ key: programData.title }, programData)
+ );
+ })
+ )
+ )
+ );
+}
+exports.default = Programs;