Full Code of twindle-co/twindle for AI

main 489403a8c761 cached
416 files
729.3 KB
199.2k tokens
290 symbols
1 requests
Download .txt
Showing preview only (831K chars total). Download the full file or copy to clipboard to get everything.
Repository: twindle-co/twindle
Branch: main
Commit: 489403a8c761
Files: 416
Total size: 729.3 KB

Directory structure:
gitextract_rvcqqkjj/

├── .all-contributorsrc
├── .github/
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── TEMP_ISSUE_TEMPLATE.md
│   └── workflows/
│       ├── conflict.yml
│       ├── stale.yml
│       └── tests.yml
├── .gitignore
├── CNAME
├── LICENSE
├── README.md
├── misc/
│   ├── CONTRIBUTING.md
│   ├── docs/
│   │   ├── CHEATSHEET.md
│   │   ├── CODE-REVIEW-CHECKLIST.md
│   │   ├── FAQ.md
│   │   ├── NAMING-CONVENTIONS.md
│   │   ├── ONBOARDING.md
│   │   ├── README.md
│   │   ├── RESOURCES.md
│   │   ├── TEAM.md
│   │   ├── TWINDLE.md
│   │   ├── TWITTER.md
│   │   ├── articles/
│   │   │   ├── Process-for-new-contributors.md
│   │   │   ├── README.md
│   │   │   ├── creating-first-pull-request.md
│   │   │   ├── design-guide-for-good-logo.md
│   │   │   ├── git -github-related.md
│   │   │   ├── handlebar-explained.md
│   │   │   ├── javascript-code.md
│   │   │   ├── pr-clean-commits.md
│   │   │   ├── puppeteer-explained.md
│   │   │   ├── setup-prettier-vscode.md
│   │   │   ├── solving-forked-commit-ahead.md
│   │   │   ├── sync-to-main-repo-using-git-bash.md
│   │   │   ├── sync-to-main-repo-using-pull-request.md
│   │   │   └── sync-to-main-repo.md
│   │   └── images/
│   │       └── README.md
│   ├── firstpr/
│   │   ├── abdu_masoudi.md
│   │   ├── abhilash_s_s.md
│   │   ├── ad3rinto.md
│   │   ├── adewale.md
│   │   ├── aditya.md
│   │   ├── aditya20233.md
│   │   ├── aditya786.md
│   │   ├── akshay.md
│   │   ├── alejandra_pinto.md
│   │   ├── alexis.md
│   │   ├── ali.md
│   │   ├── andrei.md
│   │   ├── anujshukla.md
│   │   ├── aparna.md
│   │   ├── aravind.md
│   │   ├── arthurbuhl.md
│   │   ├── ashish.md
│   │   ├── baijanath.md
│   │   ├── bill.md
│   │   ├── blessing.md
│   │   ├── can.md
│   │   ├── chimdie.md
│   │   ├── codekumar.md
│   │   ├── daniel.md
│   │   ├── davabalan.md
│   │   ├── deepak.md
│   │   ├── deepak1_try2.md
│   │   ├── edori.md
│   │   ├── edwin.md
│   │   ├── eyram.md
│   │   ├── fabio.md
│   │   ├── franklinulrich.md
│   │   ├── fusen.md
│   │   ├── habeeb.md
│   │   ├── harsha.md
│   │   ├── ibrahim.md
│   │   ├── jahid.md
│   │   ├── jaki.md
│   │   ├── jesulayomi.md
│   │   ├── jilva.md
│   │   ├── joel_vinay_kumar.md
│   │   ├── karan.md
│   │   ├── karan_khosla.md
│   │   ├── kenny.md
│   │   ├── kingsley_victor.md
│   │   ├── kiran_don.md
│   │   ├── krishnadevz.md
│   │   ├── krypton.md
│   │   ├── lara_noomene.md
│   │   ├── layomi.md
│   │   ├── lilfatfrank.md
│   │   ├── liviza.md
│   │   ├── lorennale.md
│   │   ├── lukmanokunade.md
│   │   ├── luli.md
│   │   ├── manohar.md
│   │   ├── manuel_alejandro.md
│   │   ├── marcus.md
│   │   ├── maria_rivera.md
│   │   ├── mbui.md
│   │   ├── melissa_huerta.md
│   │   ├── michael.md
│   │   ├── mumbi.md
│   │   ├── nahuel.md
│   │   ├── nailah.md
│   │   ├── naveen.md
│   │   ├── neaz_mahmood.md
│   │   ├── nishank.md
│   │   ├── nitin_kadam.md
│   │   ├── nivetha.md
│   │   ├── omolo.md
│   │   ├── paniagua.md
│   │   ├── pavan.md
│   │   ├── pr_m.md
│   │   ├── prajwal.md
│   │   ├── pranav.md
│   │   ├── prasanna.md
│   │   ├── praveen.md
│   │   ├── pravin.md
│   │   ├── predrag_stamenkovic.md
│   │   ├── prem.md
│   │   ├── proful.md
│   │   ├── puru.md
│   │   ├── rafael.md
│   │   ├── rajesh_prajapati.md
│   │   ├── rakesh.md
│   │   ├── rohitsawai.md
│   │   ├── sachin.md
│   │   ├── samriddhi.md
│   │   ├── samueladeniyi.md
│   │   ├── sarvesh.md
│   │   ├── sasmita.md
│   │   ├── satyaki.md
│   │   ├── saurabh_srivastava.md
│   │   ├── scott.md
│   │   ├── sheetal.md
│   │   ├── shekharranjan.md
│   │   ├── simrin_joshi.md
│   │   ├── sippeybro.md
│   │   ├── sravan.md
│   │   ├── sunny.md
│   │   ├── suraj.md
│   │   ├── swatirao.md
│   │   ├── teckiegeek.md
│   │   ├── therealjimoh.md
│   │   ├── titi_olopade.md
│   │   ├── tolga.md
│   │   ├── trombley.md
│   │   ├── tushar.md
│   │   ├── tusharkandpal.md
│   │   ├── varad.md
│   │   ├── vera_nkanmuo.md
│   │   ├── vijaya.md
│   │   ├── vipin.md
│   │   ├── viraj_patil.md
│   │   ├── wamuyuwanjohi
│   │   └── yash.md
│   ├── playground/
│   │   ├── cli/
│   │   │   ├── README.md
│   │   │   └── spike/
│   │   │       ├── HackerNews/
│   │   │       │   ├── code.js
│   │   │       │   ├── code2.js
│   │   │       │   ├── mainindex.js
│   │   │       │   └── renderer/
│   │   │       │       ├── index.js
│   │   │       │       ├── pdf/
│   │   │       │       │   ├── createpdf.js
│   │   │       │       │   └── index.js
│   │   │       │       ├── render-template.js
│   │   │       │       └── template/
│   │   │       │           └── template.hbs
│   │   │       ├── README.md
│   │   │       ├── cli-epub/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── epub.js
│   │   │       │   ├── index.js
│   │   │       │   ├── package.json
│   │   │       │   └── readme.md
│   │   │       ├── cli-example-esm/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── index.js
│   │   │       │   ├── package.json
│   │   │       │   └── readme.md
│   │   │       ├── json-to-pdf-cli/
│   │   │       │   ├── Readme.md
│   │   │       │   ├── output.css
│   │   │       │   ├── output.html
│   │   │       │   ├── package.json
│   │   │       │   ├── script.js
│   │   │       │   ├── tweet_template.mustache
│   │   │       │   └── twit_thread.json
│   │   │       ├── markdown/
│   │   │       │   └── index.js
│   │   │       ├── pdf-from-html-cli/
│   │   │       │   ├── README.md
│   │   │       │   ├── create-pdf.js
│   │   │       │   ├── examples/
│   │   │       │   │   └── Twindle.html
│   │   │       │   ├── index.js
│   │   │       │   ├── package.json
│   │   │       │   ├── render-template.js
│   │   │       │   └── templates/
│   │   │       │       └── Thread.hbs
│   │   │       ├── pdf-from-json/
│   │   │       │   ├── Readme.md
│   │   │       │   ├── index.js
│   │   │       │   └── package.json
│   │   │       ├── phase2-server/
│   │   │       │   ├── api/
│   │   │       │   │   └── index.js
│   │   │       │   ├── config/
│   │   │       │   │   └── index.js
│   │   │       │   ├── environment.js
│   │   │       │   ├── index.js
│   │   │       │   ├── middlewares/
│   │   │       │   │   ├── index.js
│   │   │       │   │   ├── request-logger.js
│   │   │       │   │   └── twitter.js
│   │   │       │   ├── package.json
│   │   │       │   └── router/
│   │   │       │       ├── api/
│   │   │       │       │   └── index.js
│   │   │       │       ├── index.js
│   │   │       │       └── pages/
│   │   │       │           └── index.js
│   │   │       ├── simple-pdf-to-json/
│   │   │       │   ├── README.md
│   │   │       │   ├── json2pdf.html
│   │   │       │   ├── json2pdf.js
│   │   │       │   └── simple-pdf-to-json/
│   │   │       │       ├── newjson2pdf.css
│   │   │       │       ├── newjson2pdf.html
│   │   │       │       ├── newjson2pdf.js
│   │   │       │       └── old codes/
│   │   │       │           ├── oldjson2pdf.html
│   │   │       │           └── oldjson2pdf.js
│   │   │       ├── twindle-cli-node/
│   │   │       │   ├── README.md
│   │   │       │   ├── package.json
│   │   │       │   └── twindle.js
│   │   │       ├── twindle-hello-world-pdf/
│   │   │       │   ├── package.json
│   │   │       │   └── pdf.js
│   │   │       ├── twindle-thread/
│   │   │       │   ├── Readme.md
│   │   │       │   ├── script.js
│   │   │       │   └── twit_thread.json
│   │   │       └── twitter-api/
│   │   │           ├── README.md
│   │   │           ├── package.json
│   │   │           ├── responses/
│   │   │           │   ├── response-version1-searchendpoint.json
│   │   │           │   ├── response-version1-user-timeline.json
│   │   │           │   ├── response-version2-conversation.json
│   │   │           │   └── response-version2-tweetthread.json
│   │   │           ├── script-version1-searchendpoint.js
│   │   │           ├── script-version1-usertimeline.js
│   │   │           └── script-version2-conversation.js
│   │   ├── mock/
│   │   │   ├── README.md
│   │   │   ├── twit-thread.json
│   │   │   ├── twitter-recent-search-api-response.json
│   │   │   └── twitter-tweet-api-response.json
│   │   ├── tests/
│   │   │   ├── github/
│   │   │   │   ├── giturl.unit.test.js
│   │   │   │   └── repo.unit.test.js
│   │   │   └── twitter/
│   │   │       ├── api.test.js
│   │   │       ├── unit/
│   │   │       │   ├── api/
│   │   │       │   │   ├── helpers/
│   │   │       │   │   │   └── fetch.unit.test.js
│   │   │       │   │   └── twitter-endpoints/
│   │   │       │   │       ├── search.unit.test.js
│   │   │       │   │       └── tweets.unit.test.js
│   │   │       │   └── transformations/
│   │   │       │       └── helpers.unit.test.js
│   │   │       └── utils.test.js
│   │   └── twindleco/
│   │       ├── header/
│   │       │   ├── header1/
│   │       │   │   ├── header1.css
│   │       │   │   └── header1.html
│   │       │   ├── header2/
│   │       │   │   ├── header2.css
│   │       │   │   └── header2.html
│   │       │   ├── header3/
│   │       │   │   ├── header3.css
│   │       │   │   └── header3.html
│   │       │   ├── header4/
│   │       │   │   └── public/
│   │       │   │       ├── index.html
│   │       │   │       └── style.css
│   │       │   ├── header5/
│   │       │   │   ├── header_twindle.css
│   │       │   │   └── header_twindle.html
│   │       │   ├── header6/
│   │       │   │   ├── header6.css
│   │       │   │   └── header6.html
│   │       │   └── header7/
│   │       │       ├── header7.css
│   │       │       └── header7.html
│   │       ├── header8/
│   │       │   ├── header8.css
│   │       │   └── header8.html
│   │       ├── homepage/
│   │       │   ├── homepage1/
│   │       │   │   ├── Twindle Home Page.html
│   │       │   │   └── style.css
│   │       │   ├── homepage2/
│   │       │   │   ├── README.md
│   │       │   │   ├── index.html
│   │       │   │   ├── index.js
│   │       │   │   ├── style.css
│   │       │   │   └── style.scss
│   │       │   ├── homepage3/
│   │       │   │   ├── index.css
│   │       │   │   └── index.html
│   │       │   ├── homepage4/
│   │       │   │   ├── index.html
│   │       │   │   └── styles.css
│   │       │   ├── homepage6/
│   │       │   │   ├── home.css
│   │       │   │   └── home.html
│   │       │   └── homepage7/
│   │       │       ├── index.html
│   │       │       └── style.css
│   │       ├── readme.md
│   │       └── team/
│   │           └── team1/
│   │               ├── index.html
│   │               └── style.css
│   ├── twindle-thread/
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── backend/
│   │   │   ├── README.md
│   │   │   ├── common.d.ts
│   │   │   ├── index.js
│   │   │   ├── jsconfig.json
│   │   │   ├── package.json
│   │   │   └── src/
│   │   │       ├── add-thread.js
│   │   │       ├── error/
│   │   │       │   ├── api.js
│   │   │       │   ├── base.js
│   │   │       │   ├── index.js
│   │   │       │   └── validation.js
│   │   │       ├── get-thread-data.js
│   │   │       ├── get-threads-list.js
│   │   │       ├── helpers/
│   │   │       │   ├── connection.js
│   │   │       │   ├── error.js
│   │   │       │   ├── score.js
│   │   │       │   └── setup-db.sql
│   │   │       └── twitter/
│   │   │           ├── constants.js
│   │   │           ├── helpers/
│   │   │           │   └── fetch.js
│   │   │           ├── index.js
│   │   │           ├── twitter-endpoints/
│   │   │           │   └── tweets.js
│   │   │           ├── types.d.ts
│   │   │           └── types.js
│   │   ├── jsconfig.json
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── css/
│   │   │   │   ├── global.css
│   │   │   │   └── theme.css
│   │   │   ├── index.html
│   │   │   └── robots.txt
│   │   ├── snowpack.config.js
│   │   ├── src/
│   │   │   ├── App.svelte
│   │   │   ├── components/
│   │   │   │   ├── Avatar.svelte
│   │   │   │   ├── Button.svelte
│   │   │   │   ├── IconButton.svelte
│   │   │   │   ├── list/
│   │   │   │   │   ├── List.svelte
│   │   │   │   │   ├── ListItem.svelte
│   │   │   │   │   └── listElStore.js
│   │   │   │   └── utils/
│   │   │   │       └── AppIcon.svelte
│   │   │   ├── constants.js
│   │   │   ├── helpers/
│   │   │   │   └── fetch.js
│   │   │   ├── index.js
│   │   │   └── pages/
│   │   │       └── Feed.svelte
│   │   ├── types.d.ts
│   │   ├── types.js
│   │   └── workbox-config.js
│   └── twindle-web/
│       ├── .prettierrc
│       ├── README.md
│       ├── dark-theme.css
│       ├── index.html
│       ├── index.js
│       ├── scripts/
│       │   ├── header.js
│       │   └── testimonials.js
│       ├── style.css
│       └── team_details/
│           ├── README.md
│           ├── data.json
│           ├── team_details.css
│           ├── team_details.html
│           └── team_details.js
└── twindle-cli/
    ├── .gitignore
    ├── .prettierrc
    ├── README.md
    ├── jsconfig.json
    ├── package.json
    └── src/
        ├── cli.js
        ├── common.d.ts
        ├── env.js
        ├── fileOpener.js
        ├── github/
        │   └── githubparse/
        │       ├── app.js
        │       ├── convert.js
        │       └── jsonFetchData.js
        ├── hacker-news/
        │   ├── code.js
        │   └── hn.test.js
        ├── helpers/
        │   ├── error.js
        │   └── logger.js
        ├── index.js
        ├── readability/
        │   └── index.js
        ├── renderer/
        │   ├── epub/
        │   │   ├── epub.js
        │   │   ├── index.js
        │   │   └── render-template.js
        │   ├── index.js
        │   ├── md/
        │   │   ├── README.md
        │   │   └── index.js
        │   ├── mobi/
        │   │   ├── README.md
        │   │   └── index.js
        │   └── pdf/
        │       ├── create-pdf.js
        │       ├── examples/
        │       │   └── Twindle.html
        │       ├── index.js
        │       └── render-template.js
        ├── setup/
        │   └── init.js
        ├── spinner.js
        ├── twindle.js
        ├── twitter/
        │   ├── api/
        │   │   ├── constants.js
        │   │   ├── helpers/
        │   │   │   └── fetch.js
        │   │   ├── index.js
        │   │   └── twitter-endpoints/
        │   │       ├── search.js
        │   │       ├── tweets.js
        │   │       └── user_timeline.js
        │   ├── error/
        │   │   ├── api.js
        │   │   ├── base.js
        │   │   ├── index.js
        │   │   └── validation.js
        │   ├── index.js
        │   ├── mock/
        │   │   ├── delete-if-not-needed/
        │   │   │   ├── data.js
        │   │   │   └── dataaa.js
        │   │   ├── twitter-mock-responses/
        │   │   │   ├── images-text.json
        │   │   │   ├── mock.json
        │   │   │   └── only-links.json
        │   │   └── twitter-responses/
        │   │       ├── gif-retweet.json
        │   │       ├── only-images.json
        │   │       ├── only-text.json
        │   │       ├── response-version2-tweetthread.json
        │   │       ├── squirrel-pumpkin.json
        │   │       └── username-hashtag.json
        │   ├── scraping/
        │   │   └── index.js
        │   ├── transformations/
        │   │   ├── helpers.js
        │   │   ├── helpers.test.js
        │   │   ├── rich-rendering.js
        │   │   ├── rich-rendering.test.js
        │   │   ├── search-endpoint.js
        │   │   ├── tweet-endpoint.js
        │   │   ├── tweets-array-Endpoint.test.js
        │   │   ├── tweets-array-endpoint.js
        │   │   ├── user-timeline-Endpoint.test.js
        │   │   └── user-timeline-endpoint.js
        │   ├── twitter.js
        │   ├── utils/
        │   │   ├── date.js
        │   │   └── date.test.js
        │   └── validations/
        │       └── tweet-endpoint.js
        ├── types/
        │   └── twitter.ts
        ├── types.js
        └── utils/
            ├── date.js
            ├── env.js
            ├── helpers.js
            ├── helpers.test.js
            ├── image.js
            ├── image.test.js
            ├── library.js
            ├── path.js
            ├── path.test.js
            ├── send-email.js
            └── send-to-kindle.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .all-contributorsrc
================================================
{
  "files": [
    "README.md"
  ],
  "imageSize": 100,
  "commit": false,
  "contributors": [
    {
      "login": "proful",
      "name": "Proful Sadangi",
      "avatar_url": "https://avatars2.githubusercontent.com/u/354596?v=4",
      "profile": "https://github.com/proful",
      "contributions": [
        "code",
        "ideas"
      ]
    },
    {
      "login": "tr0mbl3y",
      "name": "tr0mbl3y",
      "avatar_url": "https://avatars2.githubusercontent.com/u/72851843?v=4",
      "profile": "https://github.com/tr0mbl3y",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "PuruVJ",
      "name": "Puru Vijay",
      "avatar_url": "https://avatars2.githubusercontent.com/u/47742487?v=4",
      "profile": "https://puruvj.dev",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "johnjacobkenny",
      "name": "Kenny John Jacob",
      "avatar_url": "https://avatars1.githubusercontent.com/u/19240564?v=4",
      "profile": "https://kennyj.me/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Mira-Alf",
      "name": "Mira-Alf",
      "avatar_url": "https://avatars0.githubusercontent.com/u/64691316?v=4",
      "profile": "https://github.com/Mira-Alf",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Akshay2996",
      "name": "Akshay Sharma",
      "avatar_url": "https://avatars0.githubusercontent.com/u/37118877?v=4",
      "profile": "https://www.developeratease.com/",
      "contributions": [
        "code",
        "design"
      ]
    },
    {
      "login": "shekhar10feb",
      "name": "Shekhar Ranjan",
      "avatar_url": "https://avatars0.githubusercontent.com/u/72906055?v=4",
      "profile": "https://codepen.io/shekhar4nov",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "tolgaerdonmez",
      "name": "Tolga Erdönmez",
      "avatar_url": "https://avatars0.githubusercontent.com/u/45141388?v=4",
      "profile": "http://tidible.app",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "UnevenCoder",
      "name": "Ameen Shafeeq",
      "avatar_url": "https://avatars0.githubusercontent.com/u/49345531?v=4",
      "profile": "https://m.youtube.com/channel/UCKmIFs7rFKdTE6t1y8bKAHQ/videos",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "SarveshKadam",
      "name": "Sarvesh Kadam",
      "avatar_url": "https://avatars1.githubusercontent.com/u/66166738?v=4",
      "profile": "https://www.sarveshkadam.com/",
      "contributions": [
        "code"
      ]
    }
  ],
  "contributorsPerLine": 7,
  "projectName": "twindle",
  "projectOwner": "twindle-co",
  "repoType": "github",
  "repoHost": "https://github.com",
  "skipCi": true
}


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## Description


## Attach Screenshot


> Note 2 code reviewer approval needed. Approach in twitter group & discord channel.


================================================
FILE: .github/TEMP_ISSUE_TEMPLATE.md
================================================
# Temporarily disabled



<!--
IF SUFFICIENT INFORMATION IS NOT PROVIDED VIA THE FOLLOWING TEMPLATE THE ISSUE MIGHT BE CLOSED WITHOUT FURTHER CONSIDERATION OR INVESTIGATION
-->
> Please provide us with the following information:
> ---------------------------------------------------------------

### This issue is for a: (mark with an `x`)

- [ ] Merge conflict solution
- [ ] feature request
- [ ] documentation issue or request
- [ ] regression (a behavior that used to work and stopped recently)


### Minimal steps to reproduce
>

### Expected/desired behavior
>

### Mention any other details that might be useful

> ---------------------------------------------------------------
> Thanks!


================================================
FILE: .github/workflows/conflict.yml
================================================
name: Add label on merge conflict
on:
  pull_request_target:
    branches: [ main ]
jobs:
  add-label:
    runs-on: ubuntu-latest
    steps:
      - name: Label Conflicting Pull Requests
        uses: eps1lon/actions-label-merge-conflict@v2.0.0
        with: 
          dirtyLabel: "Merge Conflict"
          repoToken: "${{ secrets.GITHUB_TOKEN }}"
          commentOnDirty: "This pull request has conflicts, which you need to resolve! :partying_face: Don't need to worry at all, please follow the steps here - https://github.com/twindle-co/twindle/wiki/Resolving-merge-conflicts"
          commentOnClean: "Conflicts have been resolved. A maintainer will review the pull request shortly."


================================================
FILE: .github/workflows/stale.yml
================================================
name: Mark stale issues and pull requests

on:
  schedule:
  - cron: "0 0 * * *"

jobs:
  stale:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/stale@v1
      with:
        repo-token: ${{ secrets.GITHUB_TOKEN }}
        stale-issue-message: 'This issue is getting old :older_adult:'
        stale-pr-message: 'This PR is getting old :older_adult:'
        stale-issue-label: 'no-issue-activity'
        stale-pr-label: 'no-pr-activity'


================================================
FILE: .github/workflows/tests.yml
================================================
name: Node.js Tests

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [10.x, 12.x, 14.x]
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
 
    - uses: actions/cache@v2
      with:
        path: ~/.npm
        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
          ${{ runner.os }}-node-

    - name: NPM Install
      working-directory: ./twindle-cli
      run: npm install
    - name: Run Tests
      working-directory: ./twindle-cli
      run: npm run test


================================================
FILE: .gitignore
================================================
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock
yarn.lock

# Confidential email config
nodemailer.config.js

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# TypeScript v1 declaration files
typings/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env
.env.test

# parcel-bundler cache (https://parceljs.org/)
.cache

# Next.js build output
.next

# Nuxt.js build / generate output
.nuxt
dist

# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and *not* Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public

# vuepress build output
.vuepress/dist

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# TernJS port file
.tern-port

# Environment variables
.env
.DS_Store
main

twindle-web/scss/
twindle-web/style.scss
twindle-web/style.css.map

================================================
FILE: CNAME
================================================
www.twindle.co

================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2020 twindle-co

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# [Twindle](https://twindle-co.github.io/twindle/.) 📖
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
[![All Contributors](https://img.shields.io/badge/all_contributors-10-orange.svg?style=flat-square)](#contributors-)
<!-- ALL-CONTRIBUTORS-BADGE:END -->

> ### An open source project for beginners.
>
> ### Converting twitter threads to pdf, epub and mobi format to be read by Kindle.

[![Open Source Love](https://firstcontributions.github.io/open-source-badges/badges/open-source-v1/open-source.svg)](https://github.com/firstcontributions/open-source-badges) [![Pull Requests Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat)](http://makeapullrequest.com)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
![image](https://visitor-badge.glitch.me/badge?page_id=Twindle-co.twindle)

### Hangout with Twindle developer => Discord [<img src='https://cdn.vox-cdn.com/thumbor/nU3aFhQTGn1z9ImiSHXkF0bnyLk=/0x0:1600x1600/1400x1400/filters:focal(659x770:915x1026):format(jpeg)/cdn.vox-cdn.com/uploads/chorus_image/image/56262027/discord_logo.0.jpg' height=40 width=40 />](https://discord.gg/jBj2zMR)


## Want to contribute on twindle cli

Pre-requsites

- JavaScript
- Node.js (basic)

Initial code goes into twindle-cli

```
cd twindle-cli
npm install
cp .env.example .env
```
*Note:* Create .env file under twindle-cli

You need Twitter Developer API bearer token ([instructions](https://github.com/twindle-co/twindle/wiki/Applying-for-Developer-Access-from-Twitter))

# How to Run twindle?
```
node . -i 1002103360646823936
```

## Reading sources suppoorted
✅ Twitter Thread

✅ Hacker News Comments

✅ Github markdown pages

✅ Any articles (URL)

## Connect with us

[<img src='https://www.creativefreedom.co.uk/wp-content/uploads/2017/06/Twitter-featured.png' height=45 width=55 />](https://twitter.com/twindleco)
[<img src ='https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcQ342VRbRlgLDPviYYJgxfCVEHKmtuV8LIisA&usqp=CAU'  width=50 height=50 />](https://www.youtube.com/channel/UCKxUmbHq5P5pd5IyUiZ8MHA)
[<img src='https://cdn.vox-cdn.com/thumbor/nU3aFhQTGn1z9ImiSHXkF0bnyLk=/0x0:1600x1600/1400x1400/filters:focal(659x770:915x1026):format(jpeg)/cdn.vox-cdn.com/uploads/chorus_image/image/56262027/discord_logo.0.jpg' height=50 width=50 />](https://discord.gg/jBj2zMR)

## Contributors ✨

Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
  <tr>
    <td align="center"><a href="https://github.com/proful"><img src="https://avatars2.githubusercontent.com/u/354596?v=4" width="100px;" alt=""/><br /><sub><b>Proful Sadangi</b></sub></a><br /><a href="https://github.com/twindle-co/twindle/commits?author=proful" title="Code">💻</a> <a href="#ideas-proful" title="Ideas, Planning, & Feedback">🤔</a></td>
    <td align="center"><a href="https://github.com/tr0mbl3y"><img src="https://avatars2.githubusercontent.com/u/72851843?v=4" width="100px;" alt=""/><br /><sub><b>tr0mbl3y</b></sub></a><br /><a href="https://github.com/twindle-co/twindle/commits?author=tr0mbl3y" title="Code">💻</a></td>
    <td align="center"><a href="https://puruvj.dev"><img src="https://avatars2.githubusercontent.com/u/47742487?v=4" width="100px;" alt=""/><br /><sub><b>Puru Vijay</b></sub></a><br /><a href="https://github.com/twindle-co/twindle/commits?author=PuruVJ" title="Code">💻</a></td>
    <td align="center"><a href="https://kennyj.me/"><img src="https://avatars1.githubusercontent.com/u/19240564?v=4" width="100px;" alt=""/><br /><sub><b>Kenny John Jacob</b></sub></a><br /><a href="https://github.com/twindle-co/twindle/commits?author=johnjacobkenny" title="Code">💻</a></td>
    <td align="center"><a href="https://github.com/Mira-Alf"><img src="https://avatars0.githubusercontent.com/u/64691316?v=4" width="100px;" alt=""/><br /><sub><b>Mira-Alf</b></sub></a><br /><a href="https://github.com/twindle-co/twindle/commits?author=Mira-Alf" title="Code">💻</a></td>
    <td align="center"><a href="https://www.developeratease.com/"><img src="https://avatars0.githubusercontent.com/u/37118877?v=4" width="100px;" alt=""/><br /><sub><b>Akshay Sharma</b></sub></a><br /><a href="https://github.com/twindle-co/twindle/commits?author=Akshay2996" title="Code">💻</a> <a href="#design-Akshay2996" title="Design">🎨</a></td>
    <td align="center"><a href="https://codepen.io/shekhar4nov"><img src="https://avatars0.githubusercontent.com/u/72906055?v=4" width="100px;" alt=""/><br /><sub><b>Shekhar Ranjan</b></sub></a><br /><a href="https://github.com/twindle-co/twindle/commits?author=shekhar10feb" title="Code">💻</a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://github.com/tolgaerdonmez"><img src="https://avatars0.githubusercontent.com/u/45141388?v=4" width="100px;" alt=""/><br /><sub><b>Tolga Erdönmez</b></sub></a><br /><a href="https://github.com/twindle-co/twindle/commits?author=tolgaerdonmez" title="Code">💻</a></td>
    <td align="center"><a href="https://m.youtube.com/channel/UCKmIFs7rFKdTE6t1y8bKAHQ/videos"><img src="https://avatars0.githubusercontent.com/u/49345531?v=4" width="100px;" alt=""/><br /><sub><b>Ameen Shafeeq</b></sub></a><br /><a href="https://github.com/twindle-co/twindle/commits?author=UnevenCoder" title="Code">💻</a></td>
    <td align="center"><a href="https://www.sarveshkadam.com/"><img src="https://avatars1.githubusercontent.com/u/66166738?v=4" width="100px;" alt=""/><br /><sub><b>Sarvesh Kadam</b></sub></a><br /><a href="https://github.com/twindle-co/twindle/commits?author=SarveshKadam" title="Code">💻</a></td>
  </tr>
</table>

<!-- markdownlint-enable -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->

This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!


================================================
FILE: misc/CONTRIBUTING.md
================================================
# How to contribute

You can contribute by first forking the repository and then,
- Creating Pull Requests
- Creating Issues
- Reviewing Pull Requests

## Contributing through PRs

You should keep these points in mind while contributing
- Any changes in the documentation are most welcome
- For convenience it's recommended that you don't change more than 2 or 3 files per PR
- You should respect Twindle contributors' coding style
- Any other obvious rules must be followed
- Pull requests of all kind are accepted. Just make sure you provide all the changes with reason in comments after opening the PR


## Contributing through Issues

- Make sure that there is not similiar issue available already, if so please comment any other similiar issue there itself
- No harsh language allowed.
- Do not hesitate to ask questions.

## Contributing in firstpr folder

- Make sure to use lowercase letters and avoid use of numbers or special characters while naming your files.


================================================
FILE: misc/docs/CHEATSHEET.md
================================================

![Markdown cheatsheet](./images/markdown.png)

![git cheatsheet](./images/git.png)


![Terminal commands cheatsheet](./images/term.jpg)


================================================
FILE: misc/docs/CODE-REVIEW-CHECKLIST.md
================================================
# List down things to look for in a PR 

### Code Review Checklist

- [x] For your first PR, please use all lower case for the file name.
- [x] Please use `firstname.md` as file name. Replace `firstname` with your actual first name.
- [x] In case there is already a file with same name, then use `firstname_lastname.md`.
- [x] Using `.md` file extension is a must.
- [x] Please add some basic bio about yourself in the first PR.
- [x] For the second PR, you can update the same file and add more details.
- [x]  Approve PR carefully as they may not show any merge conflict but still there can be some error.
- [x] Check for repeated names too in `TEAM.md` as sometimes the same names are getting repeated 1-2 times.

- [x] You need to create your second PR from your local machine by cloning your the forked repo and saying    few things about yourself in the doc folder. 
- [x] Then create your PR again from your local machine this time you have update your forked repo from the main repo. 
- [x] After that you state your experience whether you are a beginner ,intermediate or mentor in the TEAM.md file in doc folder.
- [x] if you having any difficulties in creating the second and third PR click this https://www.youtube.com/channel/UCKxUmbHq5P5pd5IyUiZ8MHA to help

================================================
FILE: misc/docs/FAQ.md
================================================
# FAQs

1. [General](#general-)
2. [Git](#Git-)
3. [Github](#github-octocat)
4. [Google Meet](#google-meet-)
5. [Logo](#logo-)

### General 👥

**What is our tech stack?**

- HTML, CSS & JavaScript.
- No framework.
- No extra dependency.

**How tasks will be distributed?**

- We will came up with a process to distribute tasks. 🕑
- Basically, there will be 4 parts:
  A) Beginner
  B) Independent
  C) Active
  D) Expert
- Tasks will be distributed accordingly in small groups.

**When will we start working on this?**

- We can start within a week because there are many beginners who would need assistance. Hang on with us :)

**Is there any pre-requisite to be a part of Twindle?**

- No, you can contribute to the project in these ways:
  Team: Helping each other, speaking up, pair programming, making and sharing videos (for this project).
  Github: Updating the first PR and README.md, posting questions, or discussing in the issues created.

### Git

**What is git branching in git?**

Git branches are alternative working directory system within git repository.
In essence, they are the backbone of version control and code management feature provided by git.
Here's a video explaining the git branch in short [![tutorial](https://img.youtube.com/vi/PipalhI9yWY/0.jpg)](https://youtu.be/PipalhI9yWY)

### Github :octocat:

**What to do next after creating a GitHub account?**

- Fork the project from this [link](https://github.com/twindle-co/twindle)
- Create the first PR.

**How to make a PR(Pull Request)?**

- For the first 3 tasks after you joined, you can check the [ONBOARDING page](https://github.com/twindle-co/twindle/blob/main/docs/ONBOARDING.md).
- For a general PR, this tutorial will walk you throught using VSCode and GUI:

[![tutorial](https://img.youtube.com/vi/ZQqfZt1RIpA/0.jpg)](https://youtu.be/ZQqfZt1RIpA)

- PR needs 2 code reviewer in order to be approved, if you made a PR, copy the link and share it into the Twitter group so people can assign it to themselves and approve it.
- We have a Github Team for all the members and more and more contributions are welcomed.

**Tips for your PR**

`close, closes, closed, fix, fixes, fixed, resolve, resolves, resolved`

e.g. `closes #102, closes #33, closes #14`

e.g. `closes #102 #33 #14`

### Google Meet 📹

**Rules**

- Mute yourself
- Unmute only if you are speaking
- Stay in a noise-free environment
- If you are in a noisy environment don't speak

**What will be the Google Meet timing?**

- 5 pm IST

**How to know what happened during that Google meet if I missed?**

- Someone will take notes and share it with the team.
- You can also watch the videos on this [list](https://youtu.be/i90UeTiEKQk) of the YT channel.

### Logo 🎨

**Where to make the logo from?**

- May use free platforms like Canva, Gimp, or Inkspace
- Use photoshop (if you already have the software)

**How to share the logo I made?**

- Comment on the issue **#4 "We need a logo"** raised by johnjacobkenny
- Share in the respective twitter group you belong to.

**Is it necessary to make a logo?**

- No, it is just a part of the project. So, if you are not comfortable with it, its okay.


================================================
FILE: misc/docs/NAMING-CONVENTIONS.md
================================================
# File Name Conventions

## Possible characters

### Use dashes as delimiters

- You should use dashes (-) as delimiters.
- Periods are allowed in some cases, such as for languages and conditions.
- Never use spaces or underscores. Spaces are converted to %20 in URLs or can break an URL when shared. Underscores are difficult to see when the file name is displayed as an underlined link. Although the use of underscores does not impact your ranking that much, [Google advices not to use underscores](https://www.youtube.com/watch?v=AQcSFsQyct8).


**Right:**
```
file-name-with-dashes.en.min.html
```

### Do not use special characters

Avoid using non-alphanumeric characters in file names, such as: '*' ':' '\' '/' '<' '>' '|' '"' '!' '?' '[' ']' ';' '=' '+' '&' '£' '$' '€' '%' or ','. These characters can have special meaning in programming languages or can cause problems with different operating systems.

### Use lowercase, never uppercase

We should always consider URLs as case-sensitive according to [W3.org](http://www.w3.org/TR/WD-html40-970708/htmlweb.html). Therefore, use lowercase to reduces errors when typing URLs.

# Commit Message Naming

Consist of two parts:
- Subject: Short informative summary of the commit
- Body: More detailed explanatory text if needed

## Subject:
- Short and descriptive (max 50 chars)
- Capitalized
- In imperative present tense
- Not end with period

Example:
```
Implement access right management
```

## Body:
- Separated with a blank line from the subject
- Explain what, why, etc.
- Max 72 chars
- Each paragraph capitalized

Example:
```
Implement proper authorization for each service on development phase to validate during the API call.

Access right management is used to check proper authorization to access an API by an employee or the employer.
```

# Pull Request Naming

Consists of two parts:
- Title: Short informative summary of the pull request
- Description: More detailed explanatory text describing the PR for the reviewer

## Subject:
- Short and descriptive summary
- Start with corresponding ticket/story id (GitHub issue)
- Should be capitalized and written in imperative present tense
- Not end with period

Suggested Format:   
*#[Ticket_ID] PR description*

Example:
```
#CLS-23 Add Edit on Github button to all the pages
```

## Description:
- Separated with a blank line from the subject
- Explain what, why, etc.
- Max 72 chars
- Each paragraph capitalized

Example:
``` 
This pull request is part of the work to make it easier for people to contribute to naming convention guides. One of the easiest way to make small changes would be using the Edit on Github button.

To achieve this, we needed to:
- Find the best Gitbook plugin which can do the work
- Integrate it in all the pages to redirect the user to the right page on GitHub for editing
- Make it visible on the page so users can notice it easily
```


================================================
FILE: misc/docs/ONBOARDING.md
================================================
# I joined! What to do next?

Welcome to the twindle team 🥳 , this is a beginner friendly project, please follow these steps to start!


## Connect with the team 📱

Once you are part of the twindle team, please join us here to keep in touch.

1. Follow us in twitter: [<img src='https://cdn2.iconfinder.com/data/icons/colorful-guache-social-media-logos-1/155/social-media_twitter-512.png' height=20 width=20 />](https://twitter.com/twindleco)

2. Subscribe to YT channel: [<img src ='https://cdn2.iconfinder.com/data/icons/colorful-guache-social-media-logos-1/157/social-media_youtube-512.png'  width=20 height=20 />](https://www.youtube.com/channel/UCKxUmbHq5P5pd5IyUiZ8MHA)

3. Join discord [<img src ='https://cdn2.iconfinder.com/data/icons/colorful-guache-social-media-logos-1/159/social-media_discord-alt-512.png'  width=20 height=20 />](https://discord.com/invite/jBj2zMR)

<br>

## Start working 👩🏽‍💻👨🏽‍💻

1. Fork Twindle's github [repository](https://github.com/twindle-co/twindle)

2. Do your first PR

**What is the first PR about?**
- Create a new file `firstname_lastname.md` inside the `firstpr` directory, commit your change and raise your first Pull Request through Github.

**How to do the first PR?**
- Pictures of step by step [here](https://github.com/twindle-co/twindle/issues/57)
- Video of PR steps:   

[![tutorial](https://img.youtube.com/vi/bzaBiQQl6fU/0.jpg)](https://youtu.be/bzaBiQQl6fU).


-----

3. Do your second PR

**What is the second PR about?** 2️⃣
- Make few changes in the file `firstname_lastname.md` inside the `firstpr` directory, `add`, `commit` and `push` your changes through the CLI (command line interface) and raise your second Pull Request. 

**How to do the second PR?**
- If you use Github Desktop, check this step by step [tutorial](https://github.com/twindle-co/twindle/issues/177).
- If you are using git bash/command prompt, chick this step by step [tutorial](https://github.com/twindle-co/twindle/issues/163) with screenshots or this [tutorial](https://github.com/twindle-co/twindle/issues/156) which has the commands documented.
- If you are using terminal(Mac) or command prompt(windows), watch this step by step video:

[![tutorial](https://img.youtube.com/vi/7I9StcZt5cI/0.jpg)](https://youtu.be/7I9StcZt5cI).

<br>

[![tutorial](https://img.youtube.com/vi/bPBTumdMhyQ/0.jpg)](https://youtu.be/bPBTumdMhyQ)

<br>

---

-----

4. Do the third PR
<br>

**What is the third PR about?**
- Make few changes in the file `TEAM.md` inside the `docs` directory, commit, through the CLI (command line interface) and raise your third Pull Request.  


**How to do the third PR?**

- [Step by Step tutorial](https://github.com/twindle-co/twindle/issues/226)
- Video of the tutorial using vsCode and GitLens:   

[![here](https://img.youtube.com/vi/U2bOwEY-vKo/0.jpg)](https://youtu.be/7I9StcZt5cI).


---

5. Do the fourth PR

**What is the fourth PR about?**
- Upload your profile image into /docs/images/team folder.

- Give the name same as your first pr file name & use extension jpg, jpeg or png e.g., 'proful.png'.

- Edit TEAM.md to link to your image. Someone experienced with markdown come up with an initial design (size & placement). Other follow.

This will improve your knowledge of merging. 

**How to do the fourth PR?**

- Follow the steps for third PR and add your image to the TEAM.md

<br>

---

For further questions, check the [FAQ](https://github.com/twindle-co/twindle/blob/main/docs/FAQ.md) documentation.
=======


================================================
FILE: misc/docs/README.md
================================================
# Documentation

## Table of Contents

- [FAQs](/docs/FAQ.md)
- [Naming Conventions](/docs/NAMING-CONVENTIONS.md)
- [Resources](/docs/RESOURCES.md)
- [Teams](/docs/TEAM.md)
- [Why Use Twindle?](/docs/TWINDLE.md)
- *Google Meet Link* -  https://meet.google.com/gna-hvym-tfj  **Time 5 PM IST** [Time Zone Converter](https://time.is/compare/1700_in_IST)  


================================================
FILE: misc/docs/RESOURCES.md
================================================
# Resources

This page contains the list of resources that can help you get started.

You can also contribute by providing useful resources from **Youtube or Blogs** to help others learn & understand the basic concepts.

### Blogs

- This is a simple guide about how to start with git. **Roger Dudler.** [git - the simple guide](https://rogerdudler.github.io/git-guide/index.html)
- Free GitHub Learning Labs A to Z of Web Development including (Git and Github)🐱‍🏍 👉[Article Link🌊](https://dev.to/krishnakakade/free-github-learning-labs-a-to-z-of-web-development-3501) by **krishnadevz** 
- Sync a GitHub Repo: How To Ensure Your GitHub Fork Is Up To Date. **Earthdatascience.org - by Leah Wasser, Jenny Palomino, Max Joseph** [Article Link](https://www.earthdatascience.org/courses/intro-to-earth-data-science/git-github/github-collaboration/update-github-repositories-with-changes-by-others/#:~:text=You%20can%20update%20your%20fork,be%20updated%20in%20your%20fork)
- [How to publish packages to npm (the way the industry does things)](https://zellwk.com/blog/publish-to-npm/)


### Youtube Links

- Get started with the most popular Code Editor [VsCode](https://www.youtube.com/watch?v=WPqXP_kLzpo&t=382s)
- Learn the fundamentals of [JavaScript](https://www.youtube.com/watch?v=W6NZfCO5SIk&t=1s)
- Get started with the new features of [JavaScript](https://www.youtube.com/watch?v=hdI2bqOjy3c) like ES5, ES6 features & more.
- Learn about [Asynchronous JavaScript](https://www.youtube.com/playlist?list=PL4cUxeGkcC9jx2TTZk3IGWKSbtugYdrlu) and its advance features.
- Get yourself started with [Node.js](https://www.youtube.com/watch?v=fBNz5xF-Kx4)
- Learn [Git & Github](https://www.youtube.com/watch?v=RGOj5yH7evk&t=339s)
- How to create PDFs using Puppeteer & Handlebars with HTML, watch this [video](https://youtu.be/llkkwRABN-s)
- Configure git bash and complete your second pull request. [Video](https://www.youtube.com/watch?v=cBigFcoAXZg)
- Software Engineering is Overwhelming [Video](https://www.youtube.com/watch?v=MbDjrztWtX4)
- GitHub Actions Tutorial - Basic Concepts and CI/CD Pipeline with Docker [Video](https://www.youtube.com/watch?v=R8_veQiYBjI)


### Github Repositories for learning

- [Best practices for Nodejs](https://github.com/goldbergyoni/nodebestpractices)
- [You don't know JavaScript book for have strong fundamentals](https://github.com/getify/You-Dont-Know-JS)
- [Best Practices for Clean Code in JavaScript](https://github.com/ryanmcdermott/clean-code-javascript)



================================================
FILE: misc/docs/TEAM.md
================================================
## Beginner

| Image                                                                      | Name                                                         | Description                                                                                                                                                                                                                                                                                                                                                                                                |
| -------------------------------------------------------------------------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <img src="./images/team/pranav.jpg" width="80px">                          | [Pranav Goel](https://github.com/pranavgoel29)               | I'm from India, Have basic knowledge of HTML, CSS, C++ and C, I'm currently learning Javascript.                                                                                                                                                                                                                                                                                                           |
|                                                                            | [Adewale Abiola](https://github.com/princehaybee)            | I am a Nigerian. I have basic knowledge of HTML,CSS and Javascript.                                                                                                                                                                                                                                                                                                                                        |
| <img src="./images/team/ad3rinto.jpg" width="80px">                        | [Micheal Aderinto](https://github.com/ad3rinto)              | Manchester UK, Hoping this will be my first step in the world of solving world problems with code.                                                                                                                                                                                                                                                                                                         |
| <img src="./images/team/kiran_don.jpg" width="80px">                       | Usha Kiran ([K!r@nD0n](https://twitter.com/ushakiran_m))     | I am a student from India. I just started my OpenSource journey with TWINDLE. I am currently learning #JavaScript.                                                                                                                                                                                                                                                                                         |
| <img src="./images/team/eyram.jpg" width="80px">                           | [Eyram ](https://twitter.com/Ey_kwasi)                       | I am from Ghana and I have no experience, started learning web development some months ago. I am participating to learn and also make twindle a success.                                                                                                                                                                                                                                                   |
| <img src="./images/team/michael.png" width="80px">                         | [Michael Osajeh](https://github.com/michaelcosj)             | I am from Lagos, Nigeria, second year Computer Science Undergraduate, started learning web and mobile development this year. I have basic knowledge of javascript, python, c++, dart and golang.                                                                                                                                                                                                           |
|                                                                            | [Tushar Kandpal](https://github.com/tusharkandpal)           | From India, Contributing in making **twindle** a succees, Always a Learner :v:                                                                                                                                                                                                                                                                                                                             |
| ![avatar](https://github.com/RafaelBatman55.png?size=80)                   | [Rafael Rodrigues](https://github.com/RafaelBatman55)        | Less than 1 yr of experience From small city in Rio de Janeiro State - Braz.I'm very excited to learn and helf in this project!                                                                                                                                                                                                                                                                            |
|                                                                            | [Yaksh Bariya](https://www.github.com/thunder-coding)        | I am from India. A 14 year old technology lover. I create amazing things using the knowledge I have gained so far. Currently, I want to explore more of JavaScript/TypeScript.                                                                                                                                                                                                                             |
|                                                                            | [Nishank Navelkar](https://www.github.com/nishanknavelkar)   | Im from India, Basic knoweledge of Python, C, C++, HTML, CSS, Electrical engineer, Here to learn and Contribute.                                                                                                                                                                                                                                                                                           |
|                                                                            | [Manohar Rajaram](https://github.com/manohar52)              | I am from India but currently pursuing my Masters in computer science in US. I am quite new to Javascript. I have some experience in HTML, CSS and PHP.                                                                                                                                                                                                                                                    |
|                                                                            | [Naveen Kala](https://github.com/naveenkala)                 | I'm an engineering student from India. Having basic knowledge of HTML, CSS and JavaScript. Currently I am learning Reactjs.                                                                                                                                                                                                                                                                                |
|                                                                            | [Alasi Habeeb](https://github.com/Holaryeankar007)           | I'm from Nigeria, I have experience in HTML and CSS but i'm currently learning Javascript.                                                                                                                                                                                                                                                                                                                 |
|   ![avatar](https://github.com/Sheetal777.png?size=80)                                                                        | [Sheetal Pandey](https://github.com/Sheetal777)              | A keen learner from India pursuing engineering. Good with Python and new to Web Developement.                                                                                                                                                                                                                                                                                                              |
| <img src="./images/team/mumbi.jpg" width="80px">                           | [Regina Gachomba](https://github.com/MumbiGachomba04)        | I am a Kenyan undergraduate student currently based in Ankara, Turkey. During my first year in college I learnt C,C++ and python. I am currently learning Java OOP for my coursework and teaching myself HTML,CSS and Javascript. Looking forward to master front-end development at the moment, then hopefully I can begin learning back-end.                                                             |
|                                                                            | [Swati Rao](https://github.com/SwatiRaoDataEnthusiast)       | I am from India,I am familiar with HTML,CSS and can learn Node.JS, javascript etc. This is the my first open source project TWINDLE. Really excited!!                                                                                                                                                                                                                                                      |
|                                                                            | [Prathap](https://github.com/codeprm)                        | From India. Newbie to UI tech. CS Student, 4+ exp.                                                                                                                                                                                                                                                                                                                                                         |
| ![avatar](https://github.com/lh536.png?size=80)                            | [Fabio Duarte](https://github.com/lh536)                     | I am from Colombia. I have some experience with HTML, CSS and JavaScript. Lately I've been learning Tailwindcss, ParcelJS, NodeJS and a first lesson of VueJS. I like listen to music (play guitar and drums), airplanes, cooking, video/photography and science; actually I'm biologist, but I love coding since I was in the school. I hope I can contribute to twindle. I'm always learning.            |
|                                                                            | [Nahuel Alfano](https://github.com/NahuelAlfano)             | I am from Argentina, beginner at github and open source projects. I have basic knowledge of HTML, CSS, Javascript, C#, C++, currently learning Python.                                                                                                                                                                                                                                                     |
|                                                                            | [Tr0mbley](https://github.com/tr0mbl3y)                      | learning how things works! nothing to share much                                                                                                                                                                                                                                                                                                                                                           |
|                                                                            | [Sippeybro](https://github.com/sippeybro)                    | I'm from Maldives, Have basic knowledge of HTML, CSS, php and I'm currently learning Javascript.                                                                                                                                                                                                                                                                                                           |
|                                                                            | [Titi Olopade](https://github.com/teckiegeek)                | I am from the United Kingdom. My background is Computing and Statistics with a MSc. in Agile Project Management and PRINCE2 certified,i SCRUM Master Certified. I have several years professional experience with few years career break. I started learning HTML and CSS coding 6months ago. I plan a change in career to be a Front-end developer. Here to learn and contribute to success of "twindle". |
|                                                                            | [luli](https://github.com/ululi)                             | I'm from zambia,have some basic knowledge of html, css and js, am here to learn more about web development.                                                                                                                                                                                                                                                                                                |
|                                                                            | [Ashish](https://github.com/kambleaa007)                     | 3+ yr of experience in .Net Java JavaScript Testing, Pune, India SoReady2Help :partying_face:                                                                                                                                                                                                                                                                                                              |
| <img src="./images/team/nailah.jpg" width="80px"              >            | [Nneyen ](https://github.com/Na-ilah)                        | I am from Nigeria. I am beginner at github and open source projects. I have basic knowlege of Python, HTML and CSS. I don't remember much about programming even if I have a degree in computing. I would like to be able to contribute to the open source community and build educational solutions.                                                                                                      |
|                                                                            | [Harsha Vardhan](https://github.com/Harsha-Ambati)           | I am a student from India, recently came into this web development field, had basic knowledge in HTML, CSS, JavaScript.                                                                                                                                                                                                                                                                                    |
|                                                                            | [Maria Rivera](https://github.com/GorettiRivera)             | I have basic knowledge of Javascript, HTML and CSS. Currently working in different open source projects                                                                                                                                                                                                                                                                                                    |
|                                                                            | [Neaz Mahmood](https://github.com/Neaz-Mahmood)              | I am from Dhaka, Bangladesh. I am a second year Computer Science undergraduate. I know basic html, css, javascript. I am here to learn & contribute to 'twindle'. This is my first open source project.                                                                                                                                                                                                    |
|                                                                            | [Predrag](https://github.com/stamenkovic-dev)                | I'm from Serbia, and I have only basic knowledge of HTML and CSS, but I'm here to learn more about web development and team play at coding.                                                                                                                                                                                                                                                                |
|    <img src="./images/team/franklin.jpg" width="80px">                     | [Franklin U.O. Ohaegbulam](https://github.com/frankiefab100) | I'm comfortable working with HTML and CSS, with basic knowledge of JavaScript. I'm from Nigeria and love talking about accessibility, inclusive design and web animation.                                                                                                                                                                                                                                  |
|                                                                            | [Aravind Sivasailam](https://github.com/aravindsivasailam)   | I'm a product engineer living in US with 2 years of experience in software testing and project management. New to software development and wish to improve in HTML, CSS and JS.                                                                                                                                                                                                                            |
|                                                                            | [Edwin Mancipe](https://github.com/efmg0325)                 | I am from Colombia. I have a bit of knowledge about HTML, CSS, Javascript, Python and SQL. I love to listeninng to Heavy Metal music. I like second life web browser games.                                                                                                                                                                                                                                |
|                                                                            | [Edori Atiri](https://github.com/EdoriAtiri)                 | From Nigeria. Began to learn Web Development this year. I hope to learn and contribute while I'm here.                                                                                                                                                                                                                                                                                                     |
|                                                                            | [Lorenna Leon](https://github.com/lorennaleon)               | I am Peruvian, I have knowledge in html, css and javascripts I hope to learn a lot from you                                                                                                                                                                                                                                                                                                                |
| <img src="https://avatars2.githubusercontent.com/u/58055517" width="80px"> | [Fusen Ye](https://github.com/Yexiansen66)                   | I'm a beginner from China. I know HTML,CSS and JavaScript.I want to learn more advanced knowledge and contribute to twindle.                                                                                                                                                                                                                                                                               |
|                                                                            | [OmoloG](https://github.com/geowen74)                        | From Nairobi, Kenya. Have Knowledge on HTML, CSS and some basic on javascript and Mysql. Aspiring to be a full-stack developer. Currently learning javascript.                                                                                                                                                                                                                                             |
| <img src="./images/team/shekharranjan.jpg" width="80px">                   | [Shekhar Ranjan](https://github.com/shekhar10feb)            | I'm from India, have basic knowledge of Java, SQL, HTML, CSS and still learning JavaScript, want to learn more and explore advance stuffs.                                                                                                                                                                                                                                                                 |
| <img src="https://github.com/chiomavera.png?size=80">                      | [Chioma Vera Nkanmuo](https://github.com/chiomavera)         | Hi,I'm Chioma Vera Nkanmuo, Beginner Web developer from Nigeria with basic knowledge of HTML and CSS. I am currently in my penultimate level in university. Learning while contributing in making twindle a success.                                                                                                                                                                                       |

---

<br/>

## Intermediate

| Image                                                                                                                                                                                                                                                          | Name                                                      | Description                                                                                                                                                                                                                                                                                                                 |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|                                                                                                                                                                                                                                                                | [Tolga Erdönmez](https://github.com/tolgaerdonmez)        | I'm from Turkey. I'm a student. I've been programming for 4 years but no proffessional experience.                                                                                                                                                                                                                          |
|                                                                                                                                                                                                                                                                | [Ameen](https://github.com/UnevenCoder)                   | 3+ yrs of experience ,From India , born & brought up in Jeddah [ I am 15 yrs old :)], An Extrovert & A Feeler :)                                                                                                                                                                                                            |
|                                                                                                                                                                                                                                                                | [Krypton](https://github.com/madhusudanbabar)             | I'm an engineering student from India, passionate for web technologies, especially nuxtJS. I love blogging (technical articles & CTF walkthroughs mostly as I'm also interested in cyber security).                                                                                                                         |
|                                                                                                                                                                                                                                                                | [Rakesh](https://github.com/Rakesh-4)                     | Software Developer have 3+ years of experience in C#, JavaScript and Angular Framework                                                                                                                                                                                                                                      |
|                                                                                                                                                                                                                                                                | [Samriddhi](https://github.com/sammjainn)                 | I'm a student from India. Here to learn and work together!                                                                                                                                                                                                                                                                  |
| <img src="./images/team/praveen.jpg" width="80px">                                                                                                                                                                                                             | [PraveenKumar](https://github.com/praveen2896)            | I'm from India, having 3 years of professional experience in Backend, new to JS,HTML,CSS ,Planning to learn React in future with the help of #twindle.                                                                                                                                                                      |
|                                                                                                                                                                                                                                                                | [Vipin Rawat](https://github.com/aesthytik)               | I'm a frontend Engineer from Punjab,India. 2+ years experience in React Native and React js. I create Logos and graphics for fun.Happy to help :)                                                                                                                                                                           |
| <img src="./images/team/satyaki.jpg" width="80px">                                                                                                                                                                                                             | [Satyaki Bose](https://github.com/satyaki07)              | I'm a newbie in MERN stack from Kolkata, India with 1+ years of experience. :)                                                                                                                                                                                                                                              |
| ![avatar](https://github.com/Mira-Alf.png?size=80)                                                                                                                                                                                                             | [Aparna Sivasailam](https://github.com/Mira-Alf)          | I'm from Bengaluru, India. Tech woman on a career break with 6 years of Java Experience. Trying to upskill myself with Javascript and UI/UX design                                                                                                                                                                          |
|                                                                                                                                                                                                                                                                | [Rajesh](https://github.com/rkumar1904)                   | I'm a Lead frontend developer from Mumbai, India. Total 9+ years experience in front end technology. Currently working on ReactJS & Flutter. Initially, I started my career as a Programming Faculty.                                                                                                                       |
|                                                                                                                                                                                                                                                                | [Sunny](https://github.com/SunnyDev7)                     | I am Sunny from India and a engineering student. And i am working on MERN stack and also comfortable with html, css and vanilla js and am Here to learn, collaborate and help.                                                                                                                                              |
| <img src="https://avatars0.githubusercontent.com/u/37118877?v=4" width="80px">                                                                                                                                                                                 | [Akshay Sharma](https://github.com/Akshay2996)            | I'm a Frontend Developer from Bangalore, India. Total 1+ years of experience in the industry. Contributing to Twindle to make it successful.                                                                                                                                                                                |
|                                                                                                                                                                                                                                                                | [Karan Parsnani](https://github.com/LilFatFrank)          | From Mumbai, India. Here to learn and contribute.                                                                                                                                                                                                                                                                           |
|                                                                                                                                                                                                                                                                | [Lukman Okunade](https://github.com/lokunade)             | From Lagos, Nigeria. I am joining the twindle open source to learn and contribute.                                                                                                                                                                                                                                          |
|                                                                                                                                                                                                                                                                | [krishnadevz](https://github.com/lokunade)                | I am krishna 4 years of experience in web-development Current skills(HTML/CSS/JS/REACTJS/C/bootstrap4) from india currrently i am final year CS gradd student and Learning MERN✡ Stack Developer SelfTaught-Dev/Opensourcer🛠 #100DaysOfCode(R2) FOSS❤ I like to build things & Write things related to Web🌐⚙ #webdev 🐱‍💻 |
| <img src="https://avatars1.githubusercontent.com/u/52439373?s=400&u=9f8fd9570b808befd2d3f8bdb033375d86c2fffa&v=4" width="80px">                                                                                                                                | [Melissa Huerta](https://github.com/piratelicorne)        | Hi! I'm Systems Engineer from Perú, 3+ yrs of experience in IT Infrastructure, I have knowledge in C and Javascript. I recently started in Development as Flutter Developer, currently working on side projects 👩🏽‍💻 and blogging for #WomenWhoCodeSV                                                                         |
|                                                                                                                                                                                                                                                                | [Abdou Masoudi](https://github.com/uplancer)              | a selft-taught Web Developer.                                                                                                                                                                                                                                                                                               |
|                                                                                                                                                                                                                                                                | [Viraj](https://github.com/viraj-patil)                   | I'm a full stack developer from Pune, India. Total 9+ years of experience in software industry as a developer.                                                                                                                                                                                                              |
| <img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Lt6uKVNG--/c_fill,f_auto,fl_progressive,h_320,q_auto,w_320/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/322705/1412670d-03f2-4342-bf66-483956dde97a.jpeg" width="80px"> | [Joel Vinay Kumar](https://github.com/JoelVinayKumar)     | I'm a FullStack Developer from Hyderabad, India. Worked on building microservices, web apps and mobile apps. I learned UI design out of passion. I'm proud of any small contribution to Twindle                                                                                                                             |
| <img src="https://avatars2.githubusercontent.com/u/56103269?v=4" width="80px">                                                                                                                                                                                 | [Saurabh Srivastava](https://github.com/vasudeveloper001) | From India, 18 months Software Development Experience mainly in backend PHP development. Know about JavaScript, HTML, CSS, Nodejs, Python basics as well. Learning JAVA currently and starting a YouTube Channel on coding.                                                                                                 |
| <img src="./images/team/nitin_kadam.jpeg" width="80px">                                                                                                                                                                                                        | [Nitin Kadam](https://github.com/ni3-kdm)                 | Full stack developer from Pune, India. 5+ years of experience in the web development 👩🏽‍💻.                                                                                                                                                                                                                                    |
| <img src="./images/team/marcus.jpg" width="80px">                                                                                                                                                                                                              | [Marcus](https://github.com/mar-code)                     | I'm a self taught frontend developer from Lagos, Nigeria with experience in HTML/CSS, Javascript, React, Redux, bootstrap and d3 data presentation. i am currently learning NodeJs.                                                                                                                                         |
|                                                                                                                                                                                                                                                                | [Samuel Adeniyi](https://github.com/samueladeniyi)        | I am proficient in HTML, CSS and Javascript. I am comfortable with react. I intend to become a fullstack developer with the MERN stack. I am from Nigeria.                                                                                                                                                                  |
| <img src="./images/team/aditya.jpg" width="80px">                                                                                                                                                                                                              | [Aditya Satpute](https://github.com/Foxtrot-1418)                     | I'm a Full Stack Web Developer From Nashik, Maharashtra, India. I've experience in HTML, CSS, JS, Jquery, Bootstrap, PHP and currently working fo r Multinational Company as AWS Developer.                                                                                                


| <img src="./images/team/aditya.jpg" width="80px">                                                                                                                                                                                                                                                           | [Samuel Adeniyi](https://github.com/samueladeniyi)        | I am proficient in HTML, CSS and Javascript. I am comfortable with react. I intend to become a fullstack developer with the MERN stack. I am from Nigeria.                                                                                              

---

<br/>

## Mentor

| Image                                                    | Name                                          | Description                                                                                        |
| -------------------------------------------------------- | --------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| <img src="./images/team/proful.png" width="80px">        | [Proful](https://github.com/proful)           | 15 yr of experience From India, Living in Sydney Actively participating to make twindle a success. |
| ![avatar](https://github.com/johnjacobkenny.png?size=80) | Kenny John Jacob                              | 4+ yrs of experience. From Kerala, India. Here to help :partying_face:                             |
|                                                          | Kingsley                                      | 3+ yrs of experience. Based in Nigeria and here to help :man_technologist:                         |
|                                                          | [Pratham](https://github.com/prasoonpratham)  | 2+ experience in JavaScript, always open to help :smile:                                           |
|                                                          | [Sarath](http://http://www.sarathnagaraj.ca/) | 6+ experience in JavaScript, Currently working on a side project using ReactJS :man_technologist:  |
|![Puru's profile pic](https://github.com/puruvj.png?size=80) | [Puru Vijay](https://github.com/puruvj) | 5+ experience in HTML, CSS, JS, Angular, React, Svelte, NodeJS, Python, StencilJS, Firebase, feel free to ping me for help 😁 | 



================================================
FILE: misc/docs/TWINDLE.md
================================================
# Why should twitter users consider Twindle to read through Twitter thread?

Before we dive into what Twindle aims to solve and why to consider Twindle as the first set of choices to read through informative threads on Twitter, let's take a look at the existing problem in reading through or following a long thread on Twitter.

### The Problem

Twitter threads are a common way, nowadays, to share informative content about diverse subjects quickly instead of writing up a blog post on Medium or a personal website. On every clock tick, the twitter feed volume grows exponentially; thus, keeping tracking of the threads that users find useful has become a painstaking process;

### Existing Solutions

Widely used approaches are to track is to retweet, like the tweet revisit later by scrolling through your likes feed. 

Alternatively, a Twitter bot named threadreaderapp was introduced to address the pain point by allowing users to retweet on the original post and get a link that combines all the information related to the thread in one place through a URL. Non-twitter users can also access the URL.

### Limitations of threadreaderapp

Although the threadreaderapp alleviates the pain point, there are some limitations in using the threadreaderapp bot as follows.
    - If the thread owner blocks the threadreaderapp bot, it will not access the thread content.
    - If the thread owner is a private user, the bot will not access the thread content.
    - The threadreaderapp bot can only access up to 3000 tweets per user
    - Threads get deleted from the app when they are deleted by the author or Twitter because the app site is in sync with Twitter. The only way to avoid this is a premium membership which allows threads to be saved as PDF files.
    - Finally, the reader must connect to the internet to access the URL
    
### Twindle: Access thread content offline as well
In walks Twindle, a web application allows users to convert threads on Twitter to pdf or ePub format. 
    - The users can store the pdf/ePub on a digital device 
    - The users can store the pdf/ePub on cloud services i.e, Dropbox, Google Drive and access offline,
    - Otherwise, print a hard copy and read like a good-old-traditional-reader. 

================================================
FILE: misc/docs/TWITTER.md
================================================
# 18 OCT 2029

How to make a PR directly from vscode

@Pranavgoel_29 #twindle

https://www.youtube.com/watch?v=ZQqfZt1RIpA


================================================
FILE: misc/docs/articles/Process-for-new-contributors.md
================================================
Hi everyone :wave:, usually when people get connected to an open-source project(which is yes, pretty much exciting :open_mouth: ), they are mostly unware about the project. Sure, they have some knowledge about the project but not enough to contribute to it. So, they must have enough knowledge about the project and the process, like to do what or where should they first start, etc. 
That's where this article comes in handy :metal: , as suggested by @Proful to write. So, let's go and try to know every process step by step. 

### Step 1
From the [twindle-co](https://github.com/twindle-co/twindle) to get a copy of that github account in your account.

### Step 2
Download [Git](https://git-scm.com/) and [connect the github account to it](https://linuxize.com/post/how-to-configure-git-username-and-email/).

### Step 3
Fork Twindle repository by clicking on the `Fork` button on top right corner. This will make your own copy of Twindle's code, and it will be synced up to the upstream(i.e, `twindle-co/twindle` in this case). 

### Step 4
Clone the git repository from your github account into your local machine using git `bash`/ terminal (Most likely, it's git bash for windows users).There are different ways to clone a repository into your local machine, like you can use HTTPS, SSH or GitHub CLI, but this below will do it for everyone.
```bash
git clone https://github.com/[YOUR_USERNAME]/twindle.git
```

Replace `[YOUR_USERNAME]` with your git username.

The whole repository will be copied in that folder.

> :mushroom: Tip: Always remember to work or make changes in a new branch, for this, you have to create a new branch and then, work in it like make changes or add something.
        
What is Pull Request and why should we raise one? :confused: Pull Request(PR) is just you requesting from the authority, the original upstream branch, whose application you have forked, and in that forked application, you have done some changes or added some codes. To incorporate those changes in the main file, you have to raise a pull request(pr) to the authority. So, just making some meaningful changes and save it in your account won't be beneficial until those changes are added in to the main file. That's where pull request(pr) comes into the picture. 

### Step 5
Make a new branch in your fork.

> :mushroom: Tip: Before raising a pr from the main branch in order to merge your changes into the main file, always update your repository by pulling latest code from upstream branch by running this 👇

```bash
git pull upstream main
```
And you can update your github account with the parent repository by following this amazing article written by @SarveshKadam [Sync to main repo using pull request](https://github.com/twindle-co/twindle/blob/main/docs/articles/sync-to-main-repo-using-pull-request.md).

### Step 6
Now, we are ready to raise our first PR in upstream. So, we need to do this by using our github account by following the steps given below:
   
- Switch to our new branch
- Go to firstpr
- Click on the add file button(on upper right hand side)
- Click Create new file
- Give a name of your file like yourName.md, where .md is the name of the markdown extension
- Now, write about yourself in the space given below. Here, you have to use markdown language.
   
> :mushroom: Tip: Markdown Language is a simple markup language, one can use to format any doucment. If you want to learn basic syntax, you can go here :point_right: [Markdown Language](https://www.markdownguide.org/basic-syntax/).

### Step 7
Now, we are going for the 2nd pr but this time, we are raising a pr through our local machine. For this, again update your repo first in your both local as well
as remote account and you should follow this, `twindle/docs/Team.md` in your local branch. This is about the team members, where one has to write his/her name with 
github account link and some description about himself/herself using markdown language. For pushing the changes from your local machine to your github account, you need to execute this 
command,

```bash
git push origin [new-branch]
```
where, `origin` is the remote name. Please go here, if you want to know more [Gt Commands](https://github.com/twindle-co/twindle/blob/main/docs/articles/git%20-github-related.md).

> :mushroom: Tip: If you are facing pr commit issue then, please go through this very nice article written by @PuruVJ [PR Clean Commits](https://github.com/twindle-co/twindle/blob/main/docs/articles/pr-clean-commits.md).

### Step 8
:sound: So, you are about to raise your 3rd pr. In the 3rd pr, you will add your photo in the `Team.md`. First, you need to upload your photo here, `twindle/docs/images/team` through new branch by raising pr. After merging the changes, update your repo(it's compulsory) and then, go to `twindle/docs/TEAM.md` in your new branch and edit the page, put this code `<img src="./images/team/yourName.jpg" width="80px">` in the image section in front of your name, according to the markdown syntax. 

> :mushroom: Tip: In between doing these things, you can write article also, where you can share simple approach of doing the steps, where you feel difficulties. This wiil surely give
 you confidence to express yourself and makes it easier for people to learn new things :relaxed: .
 
### Step 9
Now, you can select any of the section like either you can go to twindle-cli, twindl-web or twindle-thread according to your choice.

Suggestions are welcome !! :blush:


================================================
FILE: misc/docs/articles/README.md
================================================
# Articles

Create an article here and add it as a link on the main project readme file. This will show up on the website as links.


================================================
FILE: misc/docs/articles/creating-first-pull-request.md
================================================
I hope the following screenshots will help with your first pull request.

Firstly create your account on github and goto twindle repository page [here](https://github.com/twindle-co/twindle)
Now you can follow the following steps.

Step 1
![1](https://user-images.githubusercontent.com/5336488/96012183-7b689480-0e61-11eb-94b9-289c30811210.png)

Step 2
![2](https://user-images.githubusercontent.com/5336488/96012298-9a672680-0e61-11eb-8aa5-2c35611d6a77.png)

Step 3
![3](https://user-images.githubusercontent.com/5336488/96012404-b10d7d80-0e61-11eb-82d0-8a1fa147f7cd.png)

Step 4
![4](https://user-images.githubusercontent.com/5336488/96012445-bc60a900-0e61-11eb-8305-08d03a22fc85.png)

Step 5
![5](https://user-images.githubusercontent.com/5336488/96012476-c4b8e400-0e61-11eb-818d-705dafbe5cc1.png)

Step 6
![6](https://user-images.githubusercontent.com/5336488/96012512-ce424c00-0e61-11eb-8a03-a4d9d9e12d57.png)

Step 7
![7](https://user-images.githubusercontent.com/5336488/96012535-d4382d00-0e61-11eb-9b2c-319407fa7758.png)

Step 8
![8](https://user-images.githubusercontent.com/5336488/96012559-da2e0e00-0e61-11eb-8b1d-c7cfd39bccee.png)

Step 9
![9](https://user-images.githubusercontent.com/5336488/96012586-e0bc8580-0e61-11eb-906f-5577f5c2b075.png)

Step10
![10](https://user-images.githubusercontent.com/5336488/96012608-e619d000-0e61-11eb-9869-84e739b4b808.png)






================================================
FILE: misc/docs/articles/design-guide-for-good-logo.md
================================================
There are some teams and logos you see, no matter where you are in the world, and you know exactly who they are and what they mean.

## Hi everyone, this is Vipin, a frontend dev from Punjab, India with good knowledge of design and UI/UX.

Twindle has got a lot of overwhelming response from the dev community and and begginers have also flooded their ideas for branding and logos.


As we are designing a logo, some things should be taken in my mind (of course there is no hard and fast rule 😅)

# 1. LOGO DESIGN MUST REFLECT YOUR BUSINESS

Your logo needs to help your business stand out in a crowd, but in a way where the person looking at it can easily identify that it is your unique company. If you can incorporate into the logo key elements that your business represents, you have a better chance of people remembering it. 

# 2. KEEP IT SIMPLE 

Stop with all that clutter. Trying to squeeze too much into a logo can have a negative impact.

# 3. MAKE A STATEMENT IN BLACK & WHITE AND COLOUR

Make certain that your logo works well - both in colour and in black and white. 

If the logo loses impact in black and white, it is going to be a problem when you have to print in newspapers or utilise services that only use black ink. Ensure that a colourful logo design translates well visually into black & white.

# 4. A SCALABLE SOLUTION

our logo has to be scalable to be effective. 

Your logo might look great on your letterhead, but what happens when you have to reduce the size for a business card or online forum? The rule of thumb when it comes to scalable logos, is that your logo should look good - whether on a business card or a billboard. If you can accomplish that, you have a great logo design.

# 5. KEEP IT BALANCED

Your logo should be designed to stand the test of time too. Ensure that your design does not make overt use of fashion trends - or you may find your logo is quickly dated. 

Once you have decided what logo is perfect for your business, be sure to have it converted in JPG, GIF, and EPS format. This way you can easily use the logo for your printed materials and website.

Once you have all these key elements in place, we come to the most important part of a successful logo design and brand statement.

Now that you have your logo, and it has been broadcast to the world, it is vital you always use your logo in a consistent manner. 

Don't alter your logo for certain flyers or brochures. Not only will this confuse your audience, it risks looking less than professional. You can reduce and enlarge the logo for different formats, but never change the essence of the design.



================================================
FILE: misc/docs/articles/git -github-related.md
================================================
Hello friends :wave:  :smiley: , when we talk about **git** and **github** then, there are lot of confusion :confused: exist in our mind. Especially, 
when we talk about their commands. I also encountered with the same issue and mentors helped me and motivate me to face this and gave me some suggestions 
in order to overcome this. And thanks to the mentors, who suggested me to write an article about it. So, here I am writing about some concepts, which 
are related to **github** and **git** and some commands(which you can use it in _git bash_, _cmd_ or _vscode terminal_) too, which, I hope, would be very 
helpful for everyone.

So, here we are discussing about following terms, which might be very important:
  -  Fork
  -  Branches
  -  Push commit to a remote repository
  
### Fork    
When we **fork** a repository, in our case we **fork** the **Twindle** repository then, we get a personal copy of the repository in our **github** 
account, where we are free to make changes without affecting the main project. When we do some changes in our own repository and want to implement these changes 
in the main project then, we raise pull request(PR). The authority of the main project review the changes and if they think it is good to include this 
change in the main project then, they add it( you everytime want this to happen ) otherwise, reject it( sorry, but it happens too ). 

### Branches 
**Branches** are almost like a new copy of our code at the current state( it means you forked a repository, which becomes "master" version in your 
repository and then, you make a copy of your "master" version ), which can then be used to develop 
new code.For example, whenever we need to create a new feature, or rewrite any of our code, it's a good thing to create a new branch so that none 
of our changes affect the "master" version of the code. This is important since it can be very difficult to revert code changes from memory, 
especially in complex systems. And also there are many changes happen in the "master" version of the main repository like in **Twindle**, people work 
on the code and raise PR requests. If we try to raise PR request from our "master" version then, the PR requests raised by the people will also get 
added in our raised PR and this creates mess. So, to avoid these problems, we need to create a branch, raise PR request from that branch, this will 
avoid others' PR requests and _when the PR request is approved then, that branch must be deleted._ 

First of all, when we are creating a branch using _git bash_ then, we must assure that we are in the main branch as shown below:

 ![git9](https://user-images.githubusercontent.com/72906055/99707614-b5f9c880-2ac2-11eb-8fdd-5a6b3bbd2175.JPG)
 
 Here, in the above photo, "(main)" shows that we are in the main branch. Now, there are certain commands we should know and these are as follows:

 - To initialize a repository for a new or existing project,
 
                git init

 -  To create a branch from the current branch
 
                git branch <branch-name>
              
     this makes a copy of main branch,
     
     ![git10](https://user-images.githubusercontent.com/72906055/99710208-4685d800-2ac6-11eb-9b6b-1f7604abc9e4.JPG)
     
 -  To see how many branches in the git or local,
 
                git branch
               
    ![git11](https://user-images.githubusercontent.com/72906055/99710273-5bfb0200-2ac6-11eb-9946-dc823f3811a2.JPG)
    
    By seeing the photo, we also conclude that we are in the main branch because of the * .

 -  To see all the branches (local as well as remote),
 
                git branch -a
               
    ![git12](https://user-images.githubusercontent.com/72906055/99759139-79f15280-2b18-11eb-87d1-8a63767bc8d9.JPG)
    
    From the above picture, we can see the local as well as remote branches(in red color).

 -  To switch from current branch to another branch,
 
                git checkout <branch-name>
               
    ![git13](https://user-images.githubusercontent.com/72906055/99766351-ea9f6b80-2b26-11eb-8534-63440b2c6ff0.JPG)
    
    Here, first we in main branch, see all branches in the local and then, we switch to another branch.
 
 - To delete the branch but first, you need to go into the master or main branch then,
 
                git branch -d <branch-name>
              
   ![git14](https://user-images.githubusercontent.com/72906055/99766796-d5770c80-2b27-11eb-8bb6-cdd08c268e5f.JPG)
   
   And again check how many branches are in your local.

    Note: if it shows error: The branch <branch-name> is not fully merged then, please use,
    
    
                git branch -D <branch-name>

  -  To add one or more files to staging(index) area,
  
                git add <file_name>

  -  To list the files you have changed and those still need to add or commit,
  
                git status 

  -  To remove files from staging area(unstage),
  
                git rm --cached <file_name>

  -  To commit changes to head(here, head means where you are),
  
                git commit -m "commit message" 

  -  To see the total commits you have done,
  
                git log
 
### Push commit to a remote repository     
Commit means to save your changes in our local repository. When we do commit in the local repository then, we need to push this commit in remote 
repository or our github account. We use `git push` to push commits to do this.

The `git push` command takes two arguments:

  - A remote name, for example,  `origin`
  - A branch name, for example,  `branch1`

       `git push origin branch1`

then, go to the github account where, we can see a branch of same name is created with the changes we did in the local. From that same branch that is, 
branch1, raise pull request. _This PR would be clean and without any mess. After approval or rejection, please remove that branch from remote and local._

I urge everyone to please come forward and add more commands, if possible try to add it with suitable examples so that, it gives the better idea about 
it. 

Suggestions are welcome :blush: !!
 


================================================
FILE: misc/docs/articles/handlebar-explained.md
================================================
### **Why do we need Handlebars?**

For converting twitter threads to PDFs, we initially need to compose HTML comprising of that twitter thread with some styling and then we can consequently convert it to PDF. 

> Twitter thread --> HTML --> PDF

To compose that HTML from twitter thread we cannot directly give tweet text to PDF because it would just look like a pile of text. So we will be using a template in which we can input this twitter thread content. For creating that HTML from a template and we will be using Handlebars

### **What is Handlebars?**

Handlebars is a simple templating language. It generates HTML from a template which contains placeholders containing Handlebars expressions. Lets see in detail.

For example, below is a template that has two two Handlebars expressions

```
<p>{{firstname}} {{lastname}}</p>
```
If applied to the input object

```
{
  firstname: "Vijaya",
  lastname: "Bhaskar",
}
```

the expressions will be replaced by the corresponding properties. The result is then

```
<p>Vijaya Bhaskar</p>
```

( React JS people can already feel familiar with this by props-components thing 😃 )

### **How to utilize Handlebars in Twindle project?**

Already @tolgaerdonmez has implemented Handlebars to create a HTML from a template. Lets decode his code 😄 
Following is the code from the template [Thread.hbs](https://github.com/twindle-co/twindle/blob/main/playground/cli/pdf-from-html-cli/templates/Thread.hbs)

```
<html>
   <body>
      <h1 id="title">Twindle Thread</h1>
      <ul>
         {{!-- uses the twit mock object from mock API --}}
         {{#each thread}}
         <li>
            <div class="tweetContainer">
               <div class="header">
                  <img src="{{image}}" alt="{{twitterHandle}}" />
                  <div>
                     <h3>{{name}} - <span>@{{twitterHandle}}</span></h3>
                     <p><span>{{createdAt}}</span></p>
                  </div>
               </div>
               <p>{{tweet}}</p>
            </div>
         </li>
         {{/each}}
      </ul>
   </body>
</html>
```

In the above code we can see expressions like {{image}} {{twiiterHandle}} {{tweet}} where we input content using a JSON here. This template when given the JSON input of twitter thread data generates HTML.


Now, lets see how the template rendering is done.
Following is the code from [render-template.js](https://github.com/twindle-co/twindle/blob/main/playground/cli/pdf-from-html-cli/render-template.js) 

```
const hbs = require("handlebars");
const fs = require("fs");
const path = require("path");

// renders the html template with the given data and returns the html string
function renderTemplate(data, templateName) {
	const html = fs.readFileSync(path.join(__dirname, `templates/${templateName}.hbs`), {
		encoding: "utf-8",
	});

	// creates the Handlebars template object
	const template = hbs.compile(html);

	// renders the html template with the given data
	const rendered = template(data);
	return rendered;
}

module.exports = renderTemplate;
```
In the above code there are three main blocks, lets see one by one.
<br>

Block 1: We are primarily are reading the file contents of the template here by giving the template name.
```
const html = fs.readFileSync(path.join(__dirname, `templates/${templateName}.hbs`), {
		encoding: "utf-8",
	});
```
<br>

Block 2: Compiling the template so it can be executed immediately.
```
const template = hbs.compile(html);
```
<br>

Block 3: When given input data it would generate the HTML using the template.
```
const rendered = template(data);
	return rendered;
```
<br>

And finally in [index.js](https://github.com/twindle-co/twindle/blob/main/playground/cli/pdf-from-html-cli/index.js), we are inputting "../mock/twit-thread.json" data to "Thread.hbs" Handlebars template to generate required html.

```
const htmlContent = renderTemplate({ thread: mockData }, "Thread");
```
<br>
Thanks to @tolgaerdonmez for the amazing code. <br/>Hope you understood Handlebars and how to render HTML using a template. <br/>
Let me know  :thumbsup: or :thumbsdown:


================================================
FILE: misc/docs/articles/javascript-code.md
================================================
Hello everyone :wave: here, I am writing some questions and try to give the answer( if you think you have better answer then, you are welcome!! ) regarding 
**JavaScript** codes (thanks to **Kenny** :grinning:, who encouraged me to do this), which beginners(like me) mostly face problems to understand and 
will add new questions/answers in future and I highly suggest everyone to come forward and add your questions/answers :love_you_gesture:. 

---

## Problem no. 1

We are here to understand how the code in the last lines are working, which is in the link [here](https://github.com/twindle-co/twindle/blob/7315f9fa05ef55a2278ee73c1634392653fea635/twindle-web/team_details/team_details.js)
, as shown below:
 

    async function pushToDom() {
   
    let fetchData = await fetch('https://raw.githubusercontent.com/twindle-co/twindle/main/twindle-web/team_details/data.json');
   
    let data = await fetchData.json();
   
    let users = data.users;
   
    let html = '';
   
    users.forEach(info => html += generateCard(info)
   
      )
      
    cards.innerHTML = html;
    
    }
   


    pushToDom();
    

I asked about this code to **@UnevenCoder**. He hepled me in understanding the code by writing this code again with *comments* 
to understand in a better way. Thank you **Ameen** :grinning:.

Firstly, we need to understand about **async** and **await** as both are used for **promise**:

   - Async makes code to execute in a unserialized manner.
   - Javascript runs moves the next line without ending the firsts , so to stop it at a line we use awaits , we use it in 
    an async function.
    
---
And now we are ready to understand the code:

    async function pushToDom() {
  
Makes the function asynchronous 

    let fdata = await fetch('https://raw.githubusercontent.com/UnevenCoder/twindle/main/twindle-web/team_details/data.json');
 
This is the raw data that the api sends , like it will be in all quotations

    let data = await fdata.json();
  
Now converting raw data in json , that can be read and worked on by us easily [ await here because we first need the data to run this ]

    let users = data.users;
  
From an api you receive tons of data so you are saying the thing you want

    let str = " "; 
  
Empty string

    users.forEach(data => str += generateCard(data));
      
looping through each item of an array , generate card is a function that returns a card component in string format like 
  
    <h1>hi</h1>
    cards.innerHTML = str; 
  
after str has all the cards we just add / inject it in DOM [ basically the website ]
   
   } 

 ---

From here, we are getting **data.users**:


    {
    "users": [{
      "id": 1,
      "name": "Akshay Sharma",
      "img": "https://avatars0.githubusercontent.com/u/37118877?v=4",
      "links": {
        "website": "https://www.developeratease.com/",
        "linkedin": "https://www.linkedin.com/in/akshay-sharma-7962ab13a/",
        "github": "https://github.com/Akshay2996",
        "twitter": "https://twitter.com/AkshayS2909"
      },
      "title": "FrontEnd Developer",
      "location": {
        "city": "Bangalore",
        "state": "Karnataka",
        "country": "India"
      }
    }, {
      "id": 2,
      "name": "Satyaki Bose",
      "img": "https://avatars1.githubusercontent.com/u/25426670?s=400&u=7cc72ca148ae88bf19a10b8f36b21806504ffe34&v=4",
      "links": {
        "website": "",
        "linkedin": "https://www.linkedin.com/in/satyaki07/",
        "github": "https://github.com/satyaki07",
        "twitter": "https://twitter.com/satyaki_07"
      },
      "title": "Developer",
      "location": {
        "city": "Kolkata",
        "state": "West Bengal",
        "country": "India"
      }
    }, {
      "id": 3,
      "name": "Rafael Rodrigues",
      "img": "https://avatars3.githubusercontent.com/u/46648727?v=4",
      "links": {
        "website": "",
        "linkedin": "https://www.linkedin.com/in/rafaelrodrigues55/",
        "github": "https://github.com/RafaelBatman55",
        "twitter": "https://twitter.com/rafa_55"
      },
      "title": "FrontEnd Developer",
      "location": {
        "city": "Resende",
        "state": "Rio de Janeiro",
        "country": "Brazil"
      }
    },  {
      "id": 4,
      "name": "Ameen Shafeeq",
      "img": "https://avatars0.githubusercontent.com/u/49345531?v=4",
      "links": {
        "website": "https://ameencodes.tech/",
        "linkedin": "",
        "github": "https://github.com/unevencoder",
        "twitter": "https://twitter.com/crafter_coder"
      },
      "title": "Student",
      "location": {
        "city": "Jeddah",
        "state": "",
        "country": "Saudi Arabia"
      }
    }]
    }

---

## **Problem no. 2**

 Could you please explain what is the *function* of these brackets{} in the below code?

    module.exports = { createPdf };
 
In *JavaScript*, we can create *objects* using brackets like

   `{ name: "Twindle" }`
   
It is an *object*. Suppose we save this *object* into a *variable* me

   `const me = { name: "Twindle" }`
   
Then, we will be able to print this in the *console*

   `console.log(me.name);`
   
Because there's an *object* called "me" and in the *object*, there is a *property* called "name". There is a concept in *JavaScript*. Here we did,

   `{ name: "Twindle" }`
   
Instead, if we already have something like this

   `const name = "Twindle";`
   
Then, we can use that *variable* to create an *object*

e.g. `const me = { name: name };`

(Please pay special attention here, we have already created "name" *variable* and we are assigning that "name" *variable* as 
value in the "name" *property* in the *object*.) Then, you will still be able to print this in the *console*, :golfing:

   `console.log(me.name);`
   
And it will work the same way. So, now we have

   `const me = { name: name };`
   
In the above code, `name:name` looks odd. So, *JavaScript* made the syntax shorter.

e.g. `const me = { name };`

This means find the existing "name" *variable*. And store that with the same *variable* name and the *variable* value. 
Then, we will be still able to do this

      console.log(me.name);

We will get the same result. So, we have to write the same name as the *variable* or you need to create the *variable* name as needed in the *object*.

Suggestions are welcome :blush:!!


================================================
FILE: misc/docs/articles/pr-clean-commits.md
================================================
Take a look at the image below
![A PR](./images/fork-ahead-upstream-header-image.png)

It's a PR I opened recently. I made only 2 commits related to this PR, but as you can see, this includes a lot of commits (19 to be exact). The thing is that it was 15 commits in the previous PR, and around 13 in the one before. As you can see, these commits are just adding on. The next PR I make would have all these included plus the new commits.

So, how do you make these disappear?

Read on!

# Why does it happen?

It happens primarily when you make a PR from your `main` branch, or just push commits from it.

A word:

> Never push changes from main. Your `main` exists only to sync latest changes from the upstream branch. Always make a new branch, edit code there, and make the PR from that branch only.

# Yeah, but tell me how to get rid of those stowaway commits!

Right! All you have to do is run these commands

```bash
git checkout main
git reset --hard upstream/main
git push --force
```

These above should do it. But remember! You shouldn't have any changes in your working repo, as they might get deleted. Better make a new branch, then go back to `main` and run these commands then.


================================================
FILE: misc/docs/articles/puppeteer-explained.md
================================================
### **What is Puppeteer?**

<img src="https://user-images.githubusercontent.com/5336488/96694886-a2195480-13a6-11eb-9311-29ce9a6680e4.png" alt="Puppeteer" width="174" height="253">

From the documentation

> Puppeteer is a Node library which provides a high-level API to control headless Chrome or Chromium over the DevTools Protocol.

In other words, it is a Node library that we can use to control a headless Chrome instance. That means we are actually using Chrome, but programmatically using JavaScript. And "headless Chrome" is Chrome without the graphical user interface.

(OK, thats alot of Chromes :hammer: :grinning: )

### **Why do we need Puppeteer?**

We know that using Twindle we convert long twitter threads to readable PDFs/ePubs. So in that process we create HTML from Twitter thread content and then convert that HTML to PDFs

> Twitter thread --> HTML --> PDF

[Previously](https://github.com/twindle-co/twindle/issues/415) we have seen how we can use Handlebars to compose HTML from Twitter thread content and will now convert that HTML to PDF with the help of Puppeteer ( atleast for now :grinning: )

> We need Puppeteer to render the HTML content in the headless browser so that we can perform print operation to convert the content to PDF.

### **How to utilize Puppeteer in Twindle project?**

Already @tolgaerdonmez has implemented Puppeteer to generate PDF from HTML. Lets dissect the code :grinning: :hocho: 
Following is the code from [create-pdf.js](https://github.com/twindle-co/twindle/blob/main/playground/cli/pdf-from-html-cli/create-pdf.js)

```
const puppeteer = require("puppeteer");
const fs = require("fs");

// Creates a pdf document from htmlContent and saves it to outputPath
async function createPdf(outputPath, htmlContent) {
	// launchs a puppeteer browser instance and opens a new page
	const browser = await puppeteer.launch();
	const page = await browser.newPage();

	// sets the html of the page to htmlContent argument
	await page.setContent(htmlContent);

	// Prints the html page to pdf document and saves it to given outputPath
	await page.emulateMediaType("print");
	await page.pdf({ path: outputPath, format: "A4" });

	// Closing the puppeteer browser instance
	await browser.close();
}

module.exports = createPdf;
```

In the code above we are basically using headless Chrome browser to print content to PDF.
Though the code is self explanatory, let me explain it ( atleast for the sake of this issue :grimacing: )

Firstly we are including modules:

puppeteer -- for rendering HTML and printing to PDF.
fs -- Node.js file system module to work with the file system on your computer.

And we are creating an async function here with await as we have to perform each step after execution of the previous one.
As simple as we cannot print content without first loading the content. Lets see the process in 3 simple steps.

Step 1: Launching a new browser instance and then opening a new page.

```
const browser = await puppeteer.launch();
	const page = await browser.newPage();
```
<br>
Step 2: Setting the page content to our HTML content.
<br><br>


```
	await page.setContent(htmlContent);
```
<br>
Step 3: Setting media type to print that enables the page to be in print mode and next step would be printing the page in given "outputPath" and format of the print "A5". At the end, closing the browser.
<br> <br>

```
await page.emulateMediaType("print");
	await page.pdf({ path: outputPath, format: "A5" });
	await browser.close();
```
<br>

And finally in [index.js](https://github.com/twindle-co/twindle/blob/main/playground/cli/pdf-from-html-cli/index.js), we are creating PDF using below code that will generate Twindle.pdf with the twitter thread content.

```
await createPdf("Twindle.pdf", htmlContent);
```


### **What are Pros, Cons and Alternatives for Puppeteer?**
**Pros**

- As Puppeteer is a Chrome automation tool written in NodeJS, the generated PDF is by Chrome itself and its hard to find a better PDF generation tool for web than this.
- Fully functional and robust.
- Popular and maintained by Chrome DevTools team and used internally by Google.

**Cons**
- The only disadvantage is that using Puppeteer means we are installing a full Chrome browser in server and it might have a larger footprint. Though there is "puppeteer-core" which is a lightweight version of Puppeteer, we need a browser installation already or a remote one for connecting which again might not fully relieve from server load.

**Alternatives for Puppeteer**

- [PhantomJS](https://github.com/ariya/phantomjs) is the only alternative to Puppeteer with ~ 28k stars on Github but it has been [archived](https://github.com/ariya/phantomjs/issues/15344) and its not maintained.


Thanks to @tolgaerdonmez  for the amazing code.
Hope you understood Puppeteer and how to generate PDFs using rendered HTML.
Let me know 👍 or 👎


================================================
FILE: misc/docs/articles/setup-prettier-vscode.md
================================================
# Setting up auto-formatting in VSCode in 5 minutes

> Originally published on [puruvj.dev](https://puruvj.dev/blog/setup-prettier-vscode)

![Ugly vs Clean](https://puruvj.dev/media/prettier-setup-ugly-vs-clean/large.jpg)

look at the image above ☝. What do you see?

On the left, there is a very clean table chair, and very orderly. It's the kind of place where people would wanna sit and have a chat together. It's place where this 👇 happens

![Tony and Cap Shake hand](https://puruvj.dev/media/tony-cap-handshake-endgame.gif)

On the right, it's a mess. A total mess. You simply can't expect to collaborate with anyone in here. You'd probably scare them off! No good conversation, no collaboration, nothing, NADA!!

![Tony punch Cap in his perfect teeth](https://puruvj.dev/media/tony-punch-cap-perfect-teeth.gif)

This is the same situation with well-formatted code, and unformatted code.

A little letter to those who have written unformatted code/still write them:

> The code may look ugly, but it's still **your** code. You wrote it with the sweat of your brows and strength of your fingers. It's your child, as Scott Tolinsky would say. Having written unformatted code doesn't make you a bad developer.

If you're the only one involved in the project, sure go ahead and write unformatted code. Nobody minds(And ignore those who do).

But if you are in a team or in some situation where multiple developers are collaborating on the code, you need to have properly formatted code, whether by yourself by hand, or by having it auto-formatted by the tooling.

And it's better if it's auto-formatted.

And it's good to have formatted code, even when you're on your own. Higher readability, Higher productivity.

And this is where Prettier comes in.

# What is Prettier?

Prettier is basically a tool that automatically formats the code you've written, saving you the headache of fixing spaces and brackets positioning yourselves.

## So it's a VSCode extension?

Off course, as the title says 😋.

It's a very good extension that saves you a lot of trouble. All you have to know is one shortcut key combo to automatically format the code, and boom, you're done.

But it's more than an extension. it's actually an <mark>NPM package</mark> as well as a <mark>CLI</mark> originally, on top of which the VSCode extension has been written. It can be run as easily as

```powershell
prettier --write filename.js
```

or, to format all kinds of files all at once

```powershell
prettier --write "src/**/*.{html,css,js,json,jsx,tsx}"
```

## Why should I bother with the NPM package?

VSCode extension is much easier and better in terms of Developer Experience, but it can only format one file at a time. If you're adding prettier in a pre-existing large-enough project, you simply can't bother with opening every single file yourselves, and hitting the magic keys. You need to <mark>bulk-format</mark> them. That's where Prettier Node CLI comes in.

There's also the fact that VSCode is a memory hog, and adding extensions to it makes everything slower. You don't need to bother with this point if you have a 8 GB RAM, i5 CPU with blazing-fast SSD laptop, it can take any extension (These specs are just my laptop's specs, these are not hard limits in any way).

But if you have a slow system and don't wanna add any extensions, No Problem 👍. You'll just need to learn to use the CLI. And it's simple enough. I'll cover that below.

Now let's cut to the chase.

# Setting up the VSCode extension

All right, open up your VSCode

1. Hit `Ctrl+P` (Or `Cmd+P` if on MacOS)
2. Type `ext install esbenp.prettier-vscode` in the input box that opens up, and hit enter.
3. This will install the extension. If it opens up a dialog box about syncing this extension, choose your sync preference for this extension. If you're not sure what that means, I recommend just choosing `Yes`. That should be good enough

There, now you have Prettier installed as an extension in VSCode

## How to use it?

Easy. Open up any file you wish to format. Any JavaScript file for example.

Right click anywhere in the code, and you'll see the <mark>Format Document</mark> option in the context menu. Click on it, and your document will be auto-formatted, like this 👇

![VSCode right click to format](https://puruvj.dev/media/prettier-setup-format-option-vscode.gif)

Magic, right?

## Shortcut keys

This is a tricky one. You see, the shortcut keys are different for different Operating Systems and sometimes even for different environments.

You'll have to see for yourself. Look at the GIF above. You can the see the shortcut key combo right next to the <mark>Format Document</mark> option. It's <mark>Alt+Shift+F</mark> for me.

## Optional

You can modify your settings to format the document whenever you hit `Ctrl+S`.

Just open up your VSCode settings, search for `"Format on Save"`, and check the option as true.

![Format on Save](https://puruvj.dev/media/format-on-save.gif)

> Note: If you have autosave turned on, beware, for whenever you type, your code may jump around like crazy, as prettier tries to format your document at the instant you're typing.

# Using it with the CLI

This section is dedicated to how to format using the Prettier CLI

## Installing the CLI

There 2 ways to install the CLI 👉

### Global

It can be installed globally:

```powershell
npm install -g prettier
```

This approach is fine. However, if you're a new linux user and getting permission errors, don't worry for now. Just read the next section to install prettier locally.

### Local

Local here means you install prettier in the folder you're working on right now, and run it locally. This is actually the recommended way, and better than the global approach, in my opinion ¯\\\_(ツ)\_/¯

```powershell
npm install --save-dev prettier
```

## Running it

```powershell
npx prettier --write file.js
```

This is for the locally installed prettier. For global, remove `npx`:

```powershell
prettier --write file.js
```

You can tell it to run prettify all JS files directly in the directory

```powershell
npx prettier --write "./src/*.js"
```

Or recursively prettify all the JS files, no matter how deeply embedded in folders

```powershell
npx prettier --write "./src/**/*.js"
```

You can target multiple file formats too

```powershell
npx prettier --write "./src/**/*.{js,ts,html,css,json}"
```

The possibilities are endless.

# .prettierrc

Lastly, you can add your own `.prettierrc` file to the your workspace. It is basically a little config file telling prettier how it should handle the formatting.

Here's mine:

```json
{
  "singleQuote": true,
  "trailingComma": "all",
  "printWidth": 100
}
```

As you see, this file is tiny. And that's the best thing about prettier. Prettier comes with very sensible defaults, and will get you very good formatting even without the config file

# Conclusion

Hoped this article helped 😁


================================================
FILE: misc/docs/articles/solving-forked-commit-ahead.md
================================================
## Scenario

> - You fetch the upstream/main to your local repo
> - You pull the upstream/main to your local repo
> - You push the changes to origin/main
> - Now your origin/main is few commits ahead of upstream/main even though they are both same.

## Solution

```console
$ > git checkout main
$ > git fetch upstream
$ > git reset --hard upstream/main
$ > git push --force
```

> This will sync your origin/main with upstream/main and resolve the commit ahead issue.


================================================
FILE: misc/docs/articles/sync-to-main-repo-using-git-bash.md
================================================
---

I assume you already forked the main repo and clone into your local

Initially it has a default remote called origin,that points to your fork on GitHub

     git remote -v
   
        
# Need to do
  - Fetch the changes from main Repo to local 
  - Merge the changes in your local
  - push the merged changes to you forked Repo

**Step 1:** - To keep track of the original repo, you need to add another remote named upstream

        git remote add upstream <main_repo>
 
**Step 2:** - Fetch the changes from main Repo to local     
    
        git fetch upstream
 
 **Step 3:** - Merge the changes in your local 
 
        git merge upstream/main
 
 **Step 4:** - push the merged changes to you forked Repo
    
        git push origin


================================================
FILE: misc/docs/articles/sync-to-main-repo-using-pull-request.md
================================================
In this post, you will learn how to use Github pull request to synchronize your forked repository with the parent repository by following below steps.

1️⃣ Open and navigate to your forked repo on GitHub and generate a pull request

![image](https://user-images.githubusercontent.com/66166738/99892638-daa99800-2c9c-11eb-9e0b-0c3fb256287c.png)
<br>
2️⃣ Enter your fork repo as base repo

![image](https://user-images.githubusercontent.com/66166738/99892736-05482080-2c9e-11eb-8e3b-7900e93b4870.png)
<br>
3️⃣ Once you enter the base as your fork repo, you will be navigated to the "Comparing changes" section, just click "compare across forks"

![image](https://user-images.githubusercontent.com/66166738/99892706-8ce15f80-2c9d-11eb-9de0-f9a879a5b3b5.png)
<br>
4️⃣ Enter the original/main repo as the head repository and click on "create pull request".

![image](https://user-images.githubusercontent.com/66166738/99892752-4a6c5280-2c9e-11eb-8674-336b7f7ac675.png)
<br>
5️⃣ Enter the title of your pull request and press again on the "create pull request".

![image](https://user-images.githubusercontent.com/66166738/99893151-8dc8c000-2ca2-11eb-9ec2-ca2be173eeea.png)
<br>
6️⃣ It will perform some checks, and once all the tests are passed, click on the Merge pull request.

![image](https://user-images.githubusercontent.com/66166738/99892833-3e34c500-2c9f-11eb-8b6b-1090b7539bfb.png)
<br>
7️⃣ It's going to ask again to confirm the merger. Just press the "confirm merge" button

![image](https://user-images.githubusercontent.com/66166738/99892887-12fea580-2ca0-11eb-90d7-994dcaa9fc18.png)
<br>
8️⃣ Now you've successfully merged the file

![image](https://user-images.githubusercontent.com/66166738/99892927-77216980-2ca0-11eb-89d4-4e92a869da32.png)
<br>
9️⃣ Now we need to update the local clone repository as we sync our fork repo.
Navigate to the clone directory on your local machine and make sure you have opened the same branch you built the PR with, for me it was 'main'  and execute the command 'git pull'

![image](https://user-images.githubusercontent.com/66166738/99893023-80f79c80-2ca1-11eb-910c-93539ce2135c.png)
<br>
You've now updated your local clone with the changes you merged from the original GitHub repository into your fork.



================================================
FILE: misc/docs/articles/sync-to-main-repo.md
================================================
Here, I am assuming that you have already connected your **GitHub** account with the **Visual Studio Code**.

    
**Step 1:** - First, Open the folder in **Visual Studio Code**, which is connected to your **GitHub** account.
     
![Screen1](https://user-images.githubusercontent.com/72906055/96881417-e1759d00-149b-11eb-932f-16e1fd2844c1.JPG)
     
    
**Step 2:** - Then, click on the **Source Control** button
    
![Screen2](https://user-images.githubusercontent.com/72906055/96881465-eb979b80-149b-11eb-91f0-dc08aa8db16b.JPG)


**Step 3:** - After clicking the **Source Control** Button, you will see **Three dots**, click it then a **Dropdown** will appear like shown below,
    
![Screen3](https://user-images.githubusercontent.com/72906055/96881506-f81bf400-149b-11eb-9fd2-939b3aff9626.png)


**Step 4:** - Click **Pull, Push** button then another **Dropdown** will appear where you have to click **Pull from...** button

![Screen4](https://user-images.githubusercontent.com/72906055/96881545-023df280-149c-11eb-800f-f634c1856065.png)   
    
    
**Step 5:** - Here, you will see a **Box** with two options and you have to select **Upstream** option because **Origin** option is what 
     you set it from your **GitHub** account, where you forked it from the main branch. Click **Upstream** option two times and wait 
     for some times. Now, your local repository is synced with main repo.
    
![Screen5](https://user-images.githubusercontent.com/72906055/96881590-0ec24b00-149c-11eb-95d5-6e6b8adb2b7a.png)


================================================
FILE: misc/docs/images/README.md
================================================
store document related image in this folder


================================================
FILE: misc/firstpr/abdu_masoudi.md
================================================
## Hello :)
My name is *Abdu* and I'm a self-taught Web Developer.


================================================
FILE: misc/firstpr/abhilash_s_s.md
================================================
### Hey 👋🏽, 
##### I'm [Abhilash S S](https://github.com/itsmeAB) from Kerala, India. I am looking forward with this project to learn and explore more.


================================================
FILE: misc/firstpr/ad3rinto.md
================================================
******************************ad3rinto****************
Based in manchester , UK
twitter/ad3rinto
Codenewbie


================================================
FILE: misc/firstpr/adewale.md
================================================
I am Adewale. I am a beginner with basic knowledge of HTML, CSS and Javascript. 

I don't stop acquiring new knowledge. 

Check me out  on [GitHub]  https://github.com/princehaybee. 

This is just my 2nd PR. Trying to see if it goes well. 

I am now working on the third PR.  

this is still my 2nd PR. 



================================================
FILE: misc/firstpr/aditya.md
================================================
🤓 Aditya Satpute From Nashik, Maharashtra, India. I'm having 2+ years of experience in Web Dev. And Trying to learn javascript to work as Full Stack Dev.

💻 Also working as a freelancer.

🖥 AWS Cloud Developer

================================================
FILE: misc/firstpr/aditya20233.md
================================================
Aditya Lodhi-Python Begginer

second PR,changes from github

================================================
FILE: misc/firstpr/aditya786.md
================================================


================================================
FILE: misc/firstpr/akshay.md
================================================
# Hi! I'm [Akshay Sharma](https://github.com/Akshay2996) 👋

- ☯ I'm a **Developer / Thinker / Creator / Learner**
- 👨‍💻 FrontEnd Developer contributing to my first **Open Source Project**.
- 🔖 I would love to make some new & strong connections with people.
- 🌱 Learning new things everyday.

### Languages & Tools:

<img align="left" alt="Visual Studio Code" width="30px" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/visual-studio-code/visual-studio-code.png" />

<img align="left" alt="HTML5" width="30px" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/html/html.png" />

<img align="left" alt="CSS3" width="30px" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/css/css.png" />

<img align="left" alt="Javascript" width="30px" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/javascript/javascript.png" />

<img align="left" alt="React" width="30px" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/react/react.png" />

<img align="left" alt="Python" width="30px" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/python/python.png" />

<img align="left" alt="SQL" width="26px" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/sql/sql.png" />

<img align="left" alt="Git" width="30px" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/git/git.png" />

<img align="left" alt="Markdown" width="30px" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/markdown/markdown.png" />

<img align="left" alt="Excel" width="30px" width="30px" src="https://raw.githubusercontent.com/Akshay2996/Akshay2996/master/assets/excel.png" />


================================================
FILE: misc/firstpr/alejandra_pinto.md
================================================
### Hi there 👋

My name is Alejandra, I´m Developer in process...
----

- 🔭 I’m currently working on Projects startup
- 🌱 I’m currently learning Dart, Flutter and Phyton
- 👯 I’m looking to collaborate on Mobile Apps.
- 🤔 I’m looking for help with Haskell
- 💬 Ask me about Java, c++ and Git.


================================================
FILE: misc/firstpr/alexis.md
================================================
I'm Alexis Rivas from México, a just graduated Computer Systems Engineer and a newbie in the open source development, I hope learn and contribute everything what I can. 


================================================
FILE: misc/firstpr/ali.md
================================================
Ali Ka from Sénégal. CS student, comfortable with HTML/CSS bootstrap and javascript.


================================================
FILE: misc/firstpr/andrei.md
================================================
Andrei Dan
From Romania
beginner to html, css and javvascript


================================================
FILE: misc/firstpr/anujshukla.md
================================================
Hey this is Anuj  from Kushinagar India, I am currently an undergrad at VIT Vellore, India. I love the frontend development and I aspire to become a full stack developer. Other than code and coffee I really like traveling and reading books


================================================
FILE: misc/firstpr/aparna.md
================================================
Aparna a tech woman on break living in Bangalore with five years of experience in Java and Java EE. Trying to get into ES6 Javascript and building projects with it.
My second PR update.


================================================
FILE: misc/firstpr/aravind.md
================================================
My name is Aravind. I'm a product engineer living in US with 2 years of experience in software testing and project management. New to software development and wish to improve in HTML, CSS and JS.


================================================
FILE: misc/firstpr/arthurbuhl.md
================================================
### Hi there 👋

I am Arthur Buhl. Web developer with basic knowledge of HTML, CSS and JS.

### Learning PR

- This is my second PR using terminal.


================================================
FILE: misc/firstpr/ashish.md
================================================
Hello I'm ashish,

A former QA engineer, now a front-end developer
Looking forward to contribute on twindle.


================================================
FILE: misc/firstpr/baijanath.md
================================================
Hey, I am Baijanath Tharu from Nepal. I have been learning MERN stack for few months. I am comfortable with HTML, CSS, JavaScript, ReactJs and NodeJs. I am really excited to make some contributions to this project.


================================================
FILE: misc/firstpr/bill.md
================================================
# Hello 👋

I am Bill from Indonesia. Aspired to become a front-end web developer.

I learned web programming for the first time in the early August 2020.

I have learned HTML, CSS, JavaScript, and React so far.

Looking forward to make meaningful contribution in this project ‼

================================================
FILE: misc/firstpr/blessing.md
================================================
Olaleye Blessing, student. Little bit comfortable with HTML, CSS and JS


================================================
FILE: misc/firstpr/can.md
================================================
Can Koçman,
From Turkey,
Student and Developer.
local PR


================================================
FILE: misc/firstpr/chimdie.md
================================================
_That really felt good once again._


================================================
FILE: misc/firstpr/codekumar.md
================================================
Ashish Kamble, ( kambleaa007.github.io ) Full Stack Developer - 3+ Years of experience in coding


================================================
FILE: misc/firstpr/daniel.md
================================================
Hello! I'm Daniel, currently a CS student and a web developer.


================================================
FILE: misc/firstpr/davabalan.md
================================================
Davabalan 


================================================
FILE: misc/firstpr/deepak.md
================================================
Deepak - From Barh, Patna, language : C > HTML > JS : Beginner


================================================
FILE: misc/firstpr/deepak1_try2.md
================================================
Deepak- i have no experience in coding except C at college level and HTML & JS as hobby ( Self taught). 


================================================
FILE: misc/firstpr/edori.md
================================================
Hello, I am Edori from Nigeria. I started learning how to use HTML, CSS and Javascript this year.
This is the second PR


================================================
FILE: misc/firstpr/edwin.md
================================================
My name is Edwin Mancipe. 
I am from Colombia. 
I am 43 years old. 
I have some experience with javascript and python.
I am beginner
Twindle rocks!
2ndPR take 3 :|




================================================
FILE: misc/firstpr/eyram.md
================================================
hi, Eyram is name from Ghana.i started learning web develop some months ago.
Second pr.

================================================
FILE: misc/firstpr/fabio.md
================================================
#### Fabio Duarte
I'm from Colombia.
I'm a beginner with some experience in HTML, CSS and JavaScript. Lately I've been using Tailwindcss.

I can code a simple webpage from scratch but I don't know how to connect it with backend. I really appreciate all your advices and experience in order to improve my knowledge.

================================================
FILE: misc/firstpr/franklinulrich.md
================================================
Hello I'm [Franklin](https://twitter.com/frankiefab100), a multidisciplinary Designer and UI Developer from a Biological sciences background.


================================================
FILE: misc/firstpr/fusen.md
================================================
I am Fusen Ye from China.
A beginner of HTML,CSS and JavaScript.
I want to contribute to the project.
This my first pr.
if I make some mistakes,please forgive me.
I like hot weather.
I want to make a little progress every day.

================================================
FILE: misc/firstpr/habeeb.md
================================================
I am Alasi. I have basic knowledge of HTML and CSS but currently learning Javascript. 


================================================
FILE: misc/firstpr/harsha.md
================================================
## Hello World! 
<img src="https://raw.githubusercontent.com/iampavangandhi/iampavangandhi/master/gifs/Hi.gif" width="30px"></h2>

<a href="https://twitter.com/harsha0x01">
  <img align="left" alt="Twitter" width="22px" src="https://cdn.jsdelivr.net/npm/simple-icons@v3/icons/twitter.svg" />
</a>
<a href="https://www.linkedin.com/in/harsha-ambati">
  <img align="left" alt="Linkdein" width="22px" src="https://cdn.jsdelivr.net/npm/simple-icons@v3/icons/linkedin.svg" />
</a>
<a href="https://github.com/Harsha-Ambati">
  <img align="left" alt="Github" width="22px" src="https://cdn.jsdelivr.net/npm/simple-icons@v3/icons/github.svg" />
</a>
<a href="https://t.me/Bugbounty1">
  <img align="left" alt="Telegram" width="22px" src="https://cdn.jsdelivr.net/npm/simple-icons@v3/icons/telegram.svg" />
</a>
</br>

### I am Harsha Vardhan

- An Cyber security enthusiast
- A Computer Engineering Undergraduate Student. 
- Currently working on some of my cool side projects based on Web Development and Security.
- I'm currently looking for opportunities. I love to learn and contribute in any and every possible way.

⭐️ From [harsha](https://github.com/harsha-ambati)
-----


================================================
FILE: misc/firstpr/ibrahim.md
================================================
Hi, this is ibrahim from jordan


================================================
FILE: misc/firstpr/jahid.md
================================================
# I am Jahid Hasan, from Bangladesh.
# I am an independent learner and coder without no prior work experience.


================================================
FILE: misc/firstpr/jaki.md
================================================
Mohamad Arif Mujaki as Jaki From Jakarta, Indonesia with less 1 year of development experience. I still newbie.


================================================
FILE: misc/firstpr/jesulayomi.md
================================================
Adetola Jesulayomi, Law Student - a bit of experience in coding


================================================
FILE: misc/firstpr/jilva.md
================================================
Hi everyone, I am Jilva Sheth from India. I am a Java developer and interested to learn more about HTML, CSS and Javascript.

second pr changes from git bash terminal.

================================================
FILE: misc/firstpr/joel_vinay_kumar.md
================================================
I'm Joel Vinay Kumar, a software engineer in Auzmor Inc.

Find all about me in my [website](http://joel.swecha.io)


================================================
FILE: misc/firstpr/karan.md
================================================
Hello I am Karan Oza from Pune, India. I have 1 year experience in Angular Front-End development.


================================================
FILE: misc/firstpr/karan_khosla.md
================================================
Karan Khosla
I'm from India
I've over 9 years of experience but not in front end domain


================================================
FILE: misc/firstpr/kenny.md
================================================
Hi everyone, Kenny here


================================================
FILE: misc/firstpr/kingsley_victor.md
================================================
[Kingsley Victor](https://github.com/kingsley-einstein)

Full-stack software engineer proficient in Java, Javascript and Typescript. Observed a national diploma programme in computer science at Yaba College Of Technology in Lagos, Nigeria. Presently in first year at Federal University Of Technology, Akure. Studying software engineering.


================================================
FILE: misc/firstpr/kiran_don.md
================================================
## Hello! This is [Usha Kiran](https://twitter.com/ushakiran_m) from Andhra Pradesh, India.
### I am a second year computer science student, not having much experience in open source, projects and contribution things.
### This is my first ever pull request.

## Second PR
Added this line using git CLI locally... Hope it goes well!


================================================
FILE: misc/firstpr/krishnadevz.md
================================================
<h1 align="center">Hello World👋</h1>
<p align="center">
  <a href="https://krishnadevz.github.io/">Website</a> •
  <a href="https://twitter.com/krishnadevz">Twitter</a> •
  <a href="https://www.linkedin.com/in/krishnakakade/">Linkedin</a>
</p>

* SelfTaught-Dev/Opensourcer🛠 I like to build things & Write things related to Web🌐🐱‍👤. 
* I'm ready for discussions and making new projects.I like to Contribute to the Opensource projects.🌠 
* Check it out my latest blogs/articles here on 👉 [Dev.to](https://dev.to/krishnakakade)
* Find More details about me :-[Website](https://krishnadevz.github.io)
* You can reach me at [krishnadevz@protonmail.com](mailto:krishnadevz@protonmail.com).

**Languages:**  

<code><img height="20" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/javascript/javascript.png"></code>
<code><img height="20" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/react/react.png"></code>
<code><img height="20" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/nodejs/nodejs.png"></code>
<code><img height="20" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/html/html.png"></code>
<code><img height="20" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/css/css.png"></code>
<code><img height="20" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/c/c.png"></code>



  

 
[![Top Langs](https://github-readme-stats.vercel.app/api/top-langs/?username=krishnadevz&layout=compact&theme=dracula)](https://github.com/anuraghazra/github-readme-stats)
![krishna's github stats](https://github-readme-stats.vercel.app/api?username=krishnadevz&show_icons=true&theme=dracula)
<!--[![HitCount](http://hits.dwyl.com/krishnadevz/krishnadevz.svg)](http://hits.dwyl.com/krishnadevz/krishnadevz)-->


[![trophy](https://github-profile-trophy.vercel.app/?username=krishnadevz&theme=onedark)](https://github.com/krishnadevz/github-profile-trophy)<h1 align="center">Trophies</h1>


================================================
FILE: misc/firstpr/krypton.md
================================================

### Hi there 👋

##### I'm Kryptöñ,
An engineering student with great passion for UI/UX designing, i love to create beautiful user interfaces. i also have interest in cyber security, competitive programming, and embedded systems.


- 🔭 I’m currently working on UI/UX
- 🌱 I’m currently learning nuxtJS.
- 📫 How to reach me: 
  - LinkedIn:-https://www.linkedin.com/in/madhusudan-babar/
  - medium:- https://medium.com/@madhusudanbabar
  - Instagram:- https://instagram.com/madhu_babar
  - Portfolio:- https://madhusudan.live/
  - blog:- https://blog.madhusudan.live


================================================
FILE: misc/firstpr/lara_noomene.md
================================================
I am a junior developer student, I am following some programming courses and wish to learn more through this project.


================================================
FILE: misc/firstpr/layomi.md
================================================
Adetola Jesulayomi, Law Student -  a bit of experience in coding


================================================
FILE: misc/firstpr/lilfatfrank.md
================================================
Karan Parsnani
Experience with React and JavaScript.

Mumbai, India.


================================================
FILE: misc/firstpr/liviza.md
================================================
am luli, a newBie web-developer, this is my second PR.


================================================
FILE: misc/firstpr/lorennale.md
================================================
### Hello World!

My name is Lorenna Leon, I'm a Software Developer in process but I have a lot of desire to learn everything I can
I´m from Lima.Perú

----

   :telescope: I am a bootcamp student.   
   :seedling: I’m currently learning react,javascript, html and css .  
   :mag_right: I’m looking to collaborate with open source projects.   
   :thinking: I’m looking for help with React.   
   :smile: Pronouns: she/her   
   :zap: Fun fact: I would like to have a web development company :computer:   
   :mailbox: How to reach me:       <a href="https://www.linkedin.com/in/lorenna-le%C3%B3n-huam%C3%A1n-232351157/">
<img src="https://github.com/piratelicorne/piratelicorne/blob/master/icons/in-24.png" width="20px"></a> &nbsp;
<a href="https://www.youtube.com/channel/UCYhBpwaeWH3GGqm7yRN330Q?view_as=subscriber">
<img src="https://github.com/piratelicorne/piratelicorne/blob/master/icons/yt-24.png" width="20px"></a>&nbsp;
<a href="https://twitter.com/LowyEv">
<img src="https://github.com/piratelicorne/piratelicorne/blob/master/icons/tw-24.png" width="20px"></a>

----

![](https://github-readme-stats.vercel.app/api?username=lorennaleon&show_icons=true&theme=buefy)
![](https://github-readme-stats.vercel.app/api/top-langs/?username=lorennaleon&hide=jupyter%20notebook&layout=compact)


================================================
FILE: misc/firstpr/lukmanokunade.md
================================================
Lukman Okunade, from Nigeria. I am proficient using HTML, CSS and JavaScript. I can work with NodeJs and React too


================================================
FILE: misc/firstpr/luli.md
================================================
#hi! am luli , a beginner with some basics in html5,css3 and js


================================================
FILE: misc/firstpr/manohar.md
================================================
**Manohar, new developer, looking forward to learn from this project**


================================================
FILE: misc/firstpr/manuel_alejandro.md
================================================
I'm Manuel , from Cuba. I have knowledge in HTML,CSS, JS and a little bit of React. This is my first experience in source project.
Hello, i made some change for the second PR.

================================================
FILE: misc/firstpr/marcus.md
================================================
Marcus Ojetunde from Lagos, Nigeria with less than 1 year experience in web development
I use React as my Js framework


================================================
FILE: misc/firstpr/maria_rivera.md
================================================
Hello, My name is Maria and I'm a Software Engineer student at 42 Silicon Valley. 


================================================
FILE: misc/firstpr/mbui.md
================================================
**Githaka Mbui - Software engineer**


================================================
FILE: misc/firstpr/melissa_huerta.md
================================================
### Hello World!

My name is Melissa H, I'm a Game/Software Developer in process...  

Previously worked in the IT Infrastructure department but I came to **THE DARK SIDE**. (Development)

----

   🔭 I’m currently working on 'Printf' (42 project), WebSite built with React(WWC Project).  
   🌱 I’m currently learning C#, Unity.  
   👯 I’m looking to collaborate on Mobile Apps, Gaming Apps.  
   🤔 I’m looking for help with C#, Unity.
   💬 Ask me about C, Javascript, Git & Flutter 🤓.  
   😄 Pronouns: she/her  
   ⚡ Fun fact: Sometimes I make decisions based on my 8 Ball. 🎱  
   📫 How to reach me:       <a href="https://www.linkedin.com/in/melissahuertamn/"><img src="https://github.com/piratelicorne/piratelicorne/blob/master/icons/in-24.png" width="20px"></a> &nbsp;
<a href="https://www.youtube.com/channel/UCbTXsfGiE_PU32_krMQeusA"><img src="https://github.com/piratelicorne/piratelicorne/blob/master/icons/yt-24.png" width="20px"></a>&nbsp;
<a href="https://www.twitter.com/piratelicorne"><img src="https://github.com/piratelicorne/piratelicorne/blob/master/icons/tw-24.png" width="20px"></a>

================================================
FILE: misc/firstpr/michael.md
================================================
My name is Michael from Nigeria and I love coding.


================================================
FILE: misc/firstpr/mumbi.md
================================================
**Basic Intro**

Name : Regina Mumbi Gachomba

I am a kenyan student currently studying in Turkey for my undergrad degree in computer engineering
Proficient in C,C++ and python.
Currently doing Java OOP as part of my course work.
I have basic skills in HTML,CSS and javascript from an online course that I am currently doing.
Main reason for joining this open source project is to get an idea of how these projects work and to learn from senior developers.


================================================
FILE: misc/firstpr/nahuel.md
================================================
Hi everyone! I am Nahuel from Argentina, I am 24 years old. 
I am a beginner and this is my first time working in a project and using GitHub, have basic knowledge of c++, c #, html5, css and javascript.
I apologize if my english is not very good, I will do my best to help.
this will help me practice the language.

I modified this from my local repo! so this will be the 2nd PR

Thanks for the opportunity!


================================================
FILE: misc/firstpr/nailah.md
================================================
Nneyen Umana from Nigeria, With a few months of developing experience. 
This is my attempt at a PR... I messed up the first one and deleted the entire fork.

Update : This is to test out my second PR.... let's see how it goes. 



================================================
FILE: misc/firstpr/naveen.md
================================================
I am Naveen, an engineering student. Begineer in html , CSS, javascript and React.

================================================
FILE: misc/firstpr/neaz_mahmood.md
================================================
I couldnot my 1st pr file named neaz.md.
Maybe It was not marged yet. So I made this file. I am using git bash for this pr.

================================================
FILE: misc/firstpr/nishank.md
================================================
Nishank , Beginner , Basics of Python, C, C++, I can do basic HTML, CSS by searching and getting things done by internet search .

Second PR, Changes implemented from Github Desktop


================================================
FILE: misc/firstpr/nitin_kadam.md
================================================
### Hi there 👋

Nitin Kadam
From Pune, India. 
5+ years of experience in the web development.
Moderate level in the Front End Technologies like JavaScript, HTML, CSS.


================================================
FILE: misc/firstpr/nivetha.md
================================================
Hi, this is Nivetha from India.

**Things about me**

- I am a Computer Science graduate and looking for a job opportunity.
- I am currently learning JavaScript and ReactJS.
- Contact me at nivetharath@gmail.com
- [Resume](https://drive.google.com/file/d/1w34GFk5Y_nEz6Jz5yBo76fZHFQ6RuXwJ/view?usp=sharing)

Second PR, Changes implemented from GitHub Desktop


================================================
FILE: misc/firstpr/omolo.md
================================================
Passionate about technology and currently learning to be a full-stack developer. Am based in Nairobi, Kenya


================================================
FILE: misc/firstpr/paniagua.md
================================================
I'm from Dominican Rep. I have knowledge in HTML,CSS, JS and a little bit of React. I'm kind of new here in git and this will be my first contribution in an open source proyect!


================================================
FILE: misc/firstpr/pavan.md
================================================
# Hi! I'm Pavan Kallati 

- I'm a **Developer / Problem Solver / learner**
- Trying to be a better Full Stack Developer using JS.
- Learning new things everyday.

### Languages & Tools:
<img align="left" alt="HTML5" width="30px" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/html/html.png" />

<img align="left" alt="CSS3" width="30px" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/css/css.png" />

<img align="left" alt="Javascript" width="30px" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/javascript/javascript.png" />

<img align="left" alt="React" width="30px" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/react/react.png" />

<img align="left" alt="MongoDB" width="30px" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/mongodb/mongodb.png" />

<img align="left" alt="MongoDB" width="30px" src="https://raw.githubusercontent.com/github/explore/80688e429a7d4ef2fca1e82350fe8e3517d3494d/topics/express/express.png" />


================================================
FILE: misc/firstpr/pr_m.md
================================================
#Prathap

CS Student. Now a working professional for a big bank.

I never got a chance to work on open source or UI dev project. So, trying to improve my skills through this project.



================================================
FILE: misc/firstpr/prajwal.md
================================================
Prajwal Pradhan From Nepal,  2 years of developement experience. Specialise in React.js. 


================================================
FILE: misc/firstpr/pranav.md
================================================
## Pranav Goel
From Uttar Pradesh, India

### Skills
HTML, CSS, C++, C
- I am just starting with javascript.

================================================
FILE: misc/firstpr/prasanna.md
================================================
Prasanna from Tamil Nadu , India with 5 years of development experience in .Net


================================================
FILE: misc/firstpr/praveen.md
================================================
Praveen from TamilNadu Having 3 years of experience as a Backend developer


================================================
FILE: misc/firstpr/pravin.md
================================================
Pravinraj - Sofware Engineer focused on frontend technologies


================================================
FILE: misc/firstpr/predrag_stamenkovic.md
================================================
Predrag Stamenkovic,a
HTML and CSS beginner

My name is Predrag Stamenkovic from Belgrade - Serbia.
I work as Purchasing Manager in Jokey company, but very determined to become web developer in near future.
Currently learning HTML and CSS.

You can reach me:

- mail: pedja_stamenkovic@yahoo.com
- twiter: @Stamenkovic_P

#twindle


================================================
FILE: misc/firstpr/prem.md
================================================
Hi all, This is Prem (MrVoicer) from India. I create WordPress Website and Speed optimize them to load fast


================================================
FILE: misc/firstpr/proful.md
================================================
Proful Sadangi
From India, Living in Sydney
15 yr of developement experience


================================================
FILE: misc/firstpr/puru.md
================================================
Puru Vijay from Jaipur, Rajasthan, India. 5 years of experience.

Has worked in HTML, CSS, JS, StencilJS, React, Svelte, Angular.js, Angular, JQuery, Bootstrap, PHP, NodeJS, Python, Django, Firebase

================================================
FILE: misc/firstpr/rafael.md
================================================
I'm Rafael Rodrigues from Brazil. I'm a beginner in the programming world. I started to learn HTML+CSS+JavaScript about 5 months ago. I hope I can help and learn a lot in this project!


================================================
FILE: misc/firstpr/rajesh_prajapati.md
================================================
### Hi there 👋

- 🔭 I’m currently working on ...#React & #Flutter
- 🌱 I’m currently learning ...Javascript & Dart
- 👯 I’m looking to collaborate on ...Github People 👨🏻‍💻
- 🤔 I’m looking for help with ... space 🛰
- 💬 Ask me about ...#coding ✅
- 📫 How to reach me: ...@rkumar1904
- 😄 Pronouns: ...RjLooper
- ⚡ Fun fact: ...<RjLooper props={[Love 💜, Code 👨🏻‍💻, Deploy 🚀 } />

![Rajesh's github stats](https://github-readme-stats.vercel.app/api?username=rkumar1904&show_icons=true&count_private=true)


================================================
FILE: misc/firstpr/rakesh.md
================================================
### Hey Internet,

<br/>

I'm [Rakesh!](https://github.com/Rakesh-4) Software Developer have 3+ years of experience in C#, JavaScript and Angular Framework

---

<br/>

> Apart from coding, I am an introvert.(So I like to keep my profile low)


================================================
FILE: misc/firstpr/rohitsawai.md
================================================
Hello Everyone, This is Rohit Sawai, from Beed, Maharashtra. I'm Software Engineer and like to develop such products which will save time my time and the time of my client by making manual task automatic.


================================================
FILE: misc/firstpr/sachin.md
================================================
Sachin from India, 6 months of experience in JavaScript, Html, Css, Node, React.


================================================
FILE: misc/firstpr/samriddhi.md
================================================
## Hi!
I'm Samriddhi, a 3rd year CSE undergrad 👨‍🎓

I am currently learning MERN stack 💻📚

Glad to be here ✨

Find me on [GitHub](https://github.com/sammjainn)

================================================
FILE: misc/firstpr/samueladeniyi.md
================================================
hello, i am samuel adeniyi from nigeria, i am comfortable with HTML, CSS, Javascript, React amd Node

================================================
FILE: misc/firstpr/sarvesh.md
================================================
Sarvesh Kadam from Mumbai,India. QA Engineer currently learning Web Developement


================================================
FILE: misc/firstpr/sasmita.md
================================================

I am web Designer love to create web page in figma and photoshop and also ready to learn .I am beginner stage.


================================================
FILE: misc/firstpr/satyaki.md
================================================
# Hi, I'm Satyaki !
I am a MERN stack developer.

Find me on [Github](https://github.com/satyaki07)


================================================
FILE: misc/firstpr/saurabh_srivastava.md
================================================
# **Namaste to all of you** <img src="https://raw.githubusercontent.com/MartinHeinz/MartinHeinz/master/wave.gif" width="30px"> 

My name is Saurabh Srivastava

B.TECH is CSE. Graduate of 2018. From India, Uttar Pradesh. Have 18 months Software Development Experience using LAMP Stack.

Know Front End Technologies like JavaScript, HTML5, CSS3 in moderation, enough to get the task done.

## **Skills**
* HTML5 & CSS3
* JavaScript, jQuery
* Basic Nodejs working
* PHP and MySQL

## **Contact me here**
<a href="https://github.com/vasudeveloper001">Github</a> | <a href="https://twitter.com/saudev001">Twitter</a> | <a href="https://www.linkedin.com/in/saurabh-srivastava-b62330109/">LinkedIn</a>

✉ vasudeveloper001@gmail.com 


================================================
FILE: misc/firstpr/scott.md
================================================
I am Scott  a frontend developer from johannesburg ,south africa. 
 i am self taught with some knowledge of css,html, javascript , python , and node js.. 
 
 



================================================
FILE: misc/firstpr/sheetal.md
================================================
### Hey there! :)
#### I am Sheetal Pandey, an engineering student from India.
I basically work with Python but I am also good with HTML5 and CSS3. Though I am yet to learn JavaScript.
Happy to collaborate and learn together.

================================================
FILE: misc/firstpr/shekharranjan.md
================================================
Shekhar Ranjan - Learning JavaScript and a beginner in GitHub. I have basic knowledge of Java and SQL.This is 2nd PR and I am doing this from GitHub Desktop.

================================================
FILE: misc/firstpr/simrin_joshi.md
================================================
I am a passionate professional focussed on full stack developement. I have 1.5 years of experience in Angular, HTML, CSS , JS,  Java and MySQL.  I am looking forward to actively contribute to Twindle.

================================================
FILE: misc/firstpr/sippeybro.md
================================================
Hi im sippey bro

================================================
FILE: misc/firstpr/sravan.md
================================================
sravan-html,css andjs enthusiast.Open to learn new things.
This is my second pr from my local machine....


================================================
FILE: misc/firstpr/sunny.md
================================================
### hey there
**second pr**


i am sunny, from India and a Engineering student..
and am very much comfortable in HTML, CSS and JavaScript.
And am currently Working on MERN Stack.

You can reach me out on @sunny_dev_01 is my twitter handle.!!!


================================================
FILE: misc/firstpr/suraj.md
================================================
### Hi folks, I'm Suraj! :sun_with_face:


<a href="https://in.linkedin.com/in/surajdc">
    <img align="left" alt="Suraj Chandgude | Linkedin" width="24px" src="https://github.com/iamsurajdc/iamsurajdc/blob/master/assets/Linkedin.svg" />
  </a>
  <a href="https://twitter.com/iamsurajdc">
    <img align="left" alt="Suraj Chandgude | Twitter" width="26px" src="https://github.com/iamsurajdc/iamsurajdc/blob/master/assets/Twitter.svg" />
  </a>
  <a href="https://www.instagram.com/curiousneuron/">
    <img align="left" alt="Suraj Chandgude | Instagram" width="24px" src="https://github.com/iamsurajdc/iamsurajdc/blob/master/assets/Instagram.svg" />
  </a>
  <a href="mailto:surajchandgude0304@gmail.com">
    <img align="left" alt="Suraj Chandgude | Gmail" width="26px" src="https://github.com/iamsurajdc/iamsurajdc/blob/master/assets/Gmail.svg" />
  </a>
<br />
<br />

Hi, I'm Suraj Chandgude, a passionate sapien who writes computer programs and resides on earth for now!

- :100: &nbsp; Take a look at my portfolio site: https://iamsurajdc.js.org :globe_with_meridians:
- 🌱 &nbsp; I’m currently diving into Vue.js
- 💬 &nbsp; Give me shoutout [here](https://twitter.com/iamsurajdc)
- :page_facing_up: &nbsp; yes, I read sometime.

#### Cheers!

================================================
FILE: misc/firstpr/swatirao.md
================================================
Hi, I am swati from mumbai. Know basics of html,css.
excited to learn something new


================================================
FILE: misc/firstpr/teckiegeek.md
================================================
Titi Olopade from United Kingdom. My background is computing with few years career break.
I came back and got PRINCE2 certification (project management) and started learning coding less than a year ago.
My HTML and CSS are at an intermediate level. 
Here is how I created my second PR.
Use GIT Bash for Microsoft Windows environment to run GIT from my commandline.
From the twindle repository page on GitHub, click the green button labeled Clone or download.
In the “Clone with HTTPs” section, copy the URL for the repository.
On your laptop, open your GIT bash shell.
Type 'cd desktop' to change to to desktop directory where you want to install the cloned repository
Next, type 'git clone (URL for the repository)'
Once completed, it will display 'done'
Type 'ls -a' to view all the files in the repository (Do not edit any file from the command line).
Now go back and make some changes and save.
Then commit on your laptop by typing 'git commit'
Then push to your fork and then on your fork you make pull request, just like for 1st PR.

================================================
FILE: misc/firstpr/therealjimoh.md
================================================
Abdullah Jimoh, from Nigeria. I am a beginner in Front-end development.


================================================
FILE: misc/firstpr/titi_olopade.md
================================================
Titi Olopade from United Kingdom. My background is computing with few years career break.
I came back and got PRINCE2 certification (project management) and started learning coding less than a year ago.
My HTML and CSS are at an intermediate level. 
Here is how I created my second PR.
Use GIT Bash for Microsoft Windows environment to run GIT from my commandline.
From the twindle repository page on GitHub, click the green button labeled Clone or download.
In the “Clone with HTTPs” section, copy the URL for the repository.
On your laptop, open your GIT bash shell.
Type 'cd desktop' to change to to desktop directory where you want to install the cloned repository
Next, type 'git clone (URL for the repository)'
Once completed, it will display 'done'
Type 'ls -a' to view all the files in the repository (Do not edit any file from the command line).
Now go back and make some changes and save.
Then commit on your laptop by typing 'git commit'
Then push to your fork and then on your fork you make pull request, just like for 1st PR.

================================================
FILE: misc/firstpr/tolga.md
================================================
Tolga Erdönmez,
From Turkey,
Student and developer :)
I like javascript, go, python,
Building web & desktop apps, automating stuff, CLIs


================================================
FILE: misc/firstpr/trombley.md
================================================
I am trombley!just making a beginning
#update one
This is a second PR

================================================
FILE: misc/firstpr/tushar.md
================================================
Tushar Kashyap from India, good with HTML, CSS, JS and React.

================================================
FILE: misc/firstpr/tusharkandpal.md
================================================

# **Hey Folks!** <img src="https://raw.githubusercontent.com/MartinHeinz/MartinHeinz/master/wave.gif" width="30px">


I'm Tushar Kandpal 👨‍💻!

An Electrical Engineer from Uttarakhand, India. Also a beginner in Front-End field.
***

## **Skills**
* HTML, CSS, Java
* Familiar with JavaScript, C++, DS, MySql
* **Frameworks:** Bootstrap
* **Technologies:** Git, VS Code
***

## **Catch Me Here**
<a href="https://github.com/tusharkandpal">Github</a> | <a href="https://twitter.com/tushar_kandpal">Twitter</a> | <a href="https://www.linkedin.com/in/tushar-kandpal/">LinkedIn</a>

✉ kandpal.tushar@gmail.com


================================================
FILE: misc/firstpr/varad.md
================================================
Varad Karpe from India
Recently graduated as a Computer Science Engineer
Experience:
I have worked on a few Java projects during my internships(2).
Skills:
Java, HTML, CSS, Python, Javascript, C, C++, SQL

================================================
FILE: misc/firstpr/vera_nkanmuo.md
================================================
Hi,I'm Chioma Vera Nkanmuo, Beginner Web developer from Nigeria with basic knowledge of  HTML and  CSS. I am currently in my penultimate level in university.
Aside  from coding, I love to  read alot.
FUN FACT: I am a fitness ethusiast.
          I love to teach (because i  believe in sharing knowlege, you gain knowlege), so you may reach out to me for help, and I will be delighed  to help.
Connect with me:  verachioma39@yahoo.com / verayahoo5@gmail.com
follow me instagram and twitter; @dev_chivee


================================================
FILE: misc/firstpr/vijaya.md
================================================
Vijaya Bhaskar from Hyderbad, India with 9 years of development experience.
This is a second pull request.


================================================
FILE: misc/firstpr/vipin.md
================================================
Hi i am vipin, A frontend developer from Punjab mostly working on react native trying to learn advance javascript and nodejs.

![Vipin's github stats](https://github-readme-stats.vercel.app/api?username=aesthytik)



================================================
FILE: misc/firstpr/viraj_patil.md
================================================
** Second PR **

Hi, I'm Viraj Patil, with 9 years of experience in software development.

Currently working as fullstack developer.

Aside  from coding, I love to  read alot.

You can reach me out on:
e-mail: mr.virajpatil@gmail.com
twitter: @mr_viraj


================================================
FILE: misc/firstpr/wamuyuwanjohi
================================================
Wamuyu Wanjohi : Kenyan Junior Data NAalyst who enjoys a bit of DS


================================================
FILE: misc/firstpr/yash.md
================================================
Yash Gupta from India.
Web developer and currently in Final year of college.
Skill-HTML, CSS, Javascript, React, NodeJs.
My first pull request to twindle

================================================
FILE: misc/playground/cli/README.md
================================================
# Folder Naming Convention
> Place your code inside a folder
### Use dashes(-) as delimiters
### Use lowercase letters
### Create a readme file explaining the steps to run the code


================================================
FILE: misc/playground/cli/spike/HackerNews/code.js
================================================
const fetch = require("node-fetch");

async function searchFor(searchTerm) {
  const queryResult = [];
  const url = `http://hn.algolia.com/api/v1/search?query=${searchTerm}&tags=story`;
  const response = await fetch(url);

  if (!response.ok) {
    throw new Error(`HTTP error! status: ${response.status}`);
  }

  const result = await response.json();
  queryResult.push(result);

  return queryResult[0].hits;
}

async function captureCommentsId(keyword) {
  const elements = await searchFor(`${keyword}`);
  const Time = [];
  const Titles = [];
  const Urls = [];
  const StoryIds = [];
  for (const [k] of elements.entries()) {
    Time.push(elements[k].created_at);
    Titles.push(elements[k].title);
    Urls.push(elements[k].url);
    StoryIds.push(elements[k].objectID);
  }
  return [Time, Titles, Urls, StoryIds];
}

async function searchForStoriesComments(keyword) {
  const [Time, Titles, Urls, StoryId] = await captureCommentsId(`${keyword}`);
  const commentsDump = [];
  for (const [, value] of StoryId.entries()) {
    const api = `https://hn.algolia.com/api/v1/search?tags=comment,story_${value}`;
    const response = await fetch(api);
    const Page = await response.json();
    commentsDump.push(Page);
  }
  return [commentsDump, Titles, Urls, Time];
}
//searchForStoriesComments()

async function dumpEverything(keyword) {
  const [comments, Titles, Urls, Time] = await searchForStoriesComments(
    `${keyword}`
  );
  const commentsText = [];
  for (const [, element] of comments.entries()) {
    //console.log(`${id} and ${element}`)
    const single = element.hits;
    for (const [, val] of single.entries()) {
      //console.log(`${key} and ${val}`)
      let commentval = val.comment_text;
      commentsText.push(commentval);
    }
  }
  return [commentsText, Titles, Urls, Time];
}
//dumpEverything()

async function constructObjectArray(keyword) {
  const [Comments, Titles, Urls, Time] = await dumpEverything(`${keyword}`);
  const arrayOfStories = [];
  for (let i = 0; i < Titles.length; i++) {
    if (i != 0) {
      spin(Comments, 20);
    }

    arrayOfStories.push({
      Story: Titles[i],
      Date: Time[i],
      Website: Urls[i],
      discussion: Comments.slice(0, 20),
    });
  }
  //console.log(arrayOfStories);
  return arrayOfStories;
}

//constructObjectArray();

function spin(array, window) {
  const gone = array.splice(0, window);
  return [...array, ...gone];
}

module.exports = { constructObjectArray };


================================================
FILE: misc/playground/cli/spike/HackerNews/code2.js
================================================
const fetch = require("node-fetch");
//only story ids
async function searchFor() {
  const frontStoryIDs = [];
  const url = `https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty`;
  const response = await fetch(url);
  const result = await response.json();
  const sliced = result.slice(0, 4);
  frontStoryIDs.push(sliced);

  return frontStoryIDs;
}
//response from all storyids
async function StoriesOnFrontPage() {
  const [frontStoryids] = await searchFor();
  const StoryIDs = [];
  const kidos = [];
  const Title = [];
  const Url = [];
  const requests = frontStoryids.map((x) =>
    fetch(`https://hacker-news.firebaseio.com/v0/item/${x}.json?print=pretty`)
  );
  const response = await Promise.all(requests);
  const filter = await Promise.all(response.map((res) => res.json()));
  for (const [k, v] of filter.entries()) {
    StoryIDs.push(v.id);
    kidos.push(v.kids);
    Url.push(v.url);
    Title.push(v.title);
  }
  return [StoryIDs, kidos, Title, Url];
}

//front comment +id  with parentid=storyid
async function frontComments() {
  const CommentsText = [];
  const OwnId = []; //frontcomments own id
  const ParentId = []; //or storyid
  const Ownkids = []; //front comment kids
  const kidolen = [];
  const [, kidos, Title, Url] = await StoriesOnFrontPage();

  const allkids = [].concat(...kidos);

  const requests = allkids.map((x) =>
    fetch(`https://hacker-news.firebaseio.com/v0/item/${x}.json?print=pretty`)
  );
  const response = await Promise.all(requests);
  const filter = await Promise.all(response.map((res) => res.json()));

  for (const [k, v] of filter.entries()) {
    if (v.deleted !== true) {
      CommentsText.push(v.text);
      OwnId.push(v.id);
      ParentId.push(v.parent);
      Ownkids.push(v.kids);
    } else {
      OwnId.push(v.id);
      ParentId.push(v.parent);
    }
  }

  return [OwnId, ParentId, Ownkids, CommentsText, kidolen];
  //OwnId:frontcomments own id
  //ParentId:or storyid
  //Ownkids:kids of front comment
}
//all frontend Comments are here in commentText();

async function midcomments() {
  const [
    OwnIdorSecondPartid,
    firstparentid,
    Ownkidsid,
    ,
  ] = await frontComments();
  const subsequentComments = [];
  const ourkids = [];
  const subparentid = [];
  const ownid2 = [];
  //const Ownkidlen = [];

  const furthercomments = [].concat(...Ownkidsid).filter((e) => e !== undefined);

  //fetch childrens of first comment
  const requests = furthercomments.map((x) =>
    fetch(`https://hacker-news.firebaseio.com/v0/item/${x}.json?print=pretty`)
  );
  const response = await Promise.all(requests);
  const filter = await Promise.all(response.map((res) => res.json()));
  for (const [k, v] of filter.entries()) {
    if (v === null) {
      console.log("null val");
    } else if (v.deleted !== true) {
      subsequentComments.push(v.text);
      ownid2.push(v.id);
      subparentid.push(v.parent);
      ourkids.push(v.kids);
    } else {
        console.log("undefined");
        subparentid.push(v.parent)
        ownid2.push(v.id)
    }
    //return [ourkids,subparentid,subsequentComments]
    //subsequentcomments:childrens of front comments
    //subparent:frontcomments
  }
  return [ownid2, ourkids, subparentid, subsequentComments];
}
midcomments();

async function lastlayercomments() {
  const [, ourkids, ,] = await midcomments();
  const lastlayerComments = [];
  const ownid3 = [];
  const ownparentid = [];
  const secondlayer = [].concat(...ourkids).filter((e) => e !== undefined);
  const requests = secondlayer.map((x) =>
    fetch(`https://hacker-news.firebaseio.com/v0/item/${x}.json?print=pretty`)
  );
  const response = await Promise.all(requests);
  const filter = await Promise.all(response.map((res) => res.json()));
  for (const [k, v] of filter.entries()) {
    lastlayerComments.push(v.text);
    ownid3.push(v.id);
    ownparentid.push(v.parent);
  }
  return [ownid3, ownparentid, lastlayerComments];
}
lastlayercomments();

async function constructObjectArray() {
  const everything = [];
  const [StoryIDs, , Title, Url] = await StoriesOnFrontPage();
  const [OwnId, ParentId, , CommentsText] = await frontComments();
  const [ownid2, , subparentid, subsequentComments] = await midcomments();
  const [ownid3, ownparentid, lastlayerComments] = await lastlayercomments();
  //StoryIDs==ParentId(parent of 1st level comments)
  //Ownid(means 1st commment)==subparentid(parent of mid comments):means first comments are parent of midlevel ones
  //ownid2(mid comment)==ownparentid(parent of last layer) :
 
 //creating some key-value relationship between using parent and child ID
 //to align comments 
 
  const objfirstlevel = {};
  for (let i = 0; i < CommentsText.length; i++) {
    objfirstlevel[CommentsText[i]] = ParentId[i];
  }

  const attachfisttomiddle = {};
  for (let i = 0; i < OwnId.length; i++) {
    attachfisttomiddle[OwnId[i]] = ownid2[i];
  }

  const objmidlevel = {};
  for (let i = 0; i < subsequentComments.length; i++) {
    objmidlevel[subsequentComments[i]] = subparentid[i];
  }

  const attachmidtolast = {};
  for (let i = 0; i < ownid2.length; i++) {
    attachmidtolast[ownid2[i]] = ownid3[i];
  }

  const objlastlevel = {};
  for (let i = 0; i < lastlayerComments.length; i++) {
    objlastlevel[lastlayerComments[i]] = ownparentid[i];
  }
}

constructObjectArray();


================================================
FILE: misc/playground/cli/spike/HackerNews/mainindex.js
================================================
const { constructObjectArray } = require("./code");
const Renderer = require("./renderer");

async function news(keyword) {
  const data = await constructObjectArray(`${keyword}`);
  const outputFilePath = `${__dirname}/news.pdf`;
  await Renderer.render(data, outputFilePath);
  console.log(`your pdf saved to ${outputFilePath}`);
}
news("medicine");


================================================
FILE: misc/playground/cli/spike/HackerNews/renderer/index.js
================================================
//const { generateEpub } = require("./epub/index");
const { generatePDF } = require("./pdf");
//const spinner = require("../spinner");

const render = async (tweets, outputFilePath) => {
  
    
      return generatePDF(tweets, outputFilePath);
    /*case "epub":
      return generateEpub(tweets, outputFilePath);*/
    //default:
      //spinner.fail("Error: This renderer is not implemented yet");
    //console.error("Error: This renderer is not implemented yet");
  
};

module.exports = {
  render,
};

================================================
FILE: misc/playground/cli/spike/HackerNews/renderer/pdf/createpdf.js
================================================
// @ts-check
const puppeteer = require("puppeteer");

function footerMarkup() {
  return `
  <div class="footer" style="width: 100%;font-size: 10px !important;display: flex;justify-content: center;">
    <span>
      <span style="font-size: 10px !important;" class="pageNumber"></span>
        of
      <span style="font-size: 10px !important;" class="totalPages"></span>
    </span>
  </div>
  `;
}

/**
 * Creates a pdf document from htmlContent and saves it to outputPath
 * @param {string} outputPath
 * @param {string} htmlContent
 */
async function createPdf(outputPath, htmlContent) {
  try {
    // launches a headless puppeteer browser instance and opens a new page
    const browser = await puppeteer.launch({
      args: ["--no-sandbox"],
      headless: true,
    });

  const page = await browser.newPage();


    // sets the html of the page to htmlContent argument
    await page.setContent(htmlContent);

    // Prints the html page to pdf document and saves it to given outputPath
    await page.emulateMediaType("print");

    await page.pdf({
      path: outputPath,
      format: "A5",
      margin: {
        bottom: 52, // minimum required for footer msg to display
        left: 20,
        right: 20,
        top: 10,
      },
      printBackground: true,
      displayHeaderFooter: true,
      footerTemplate: footerMarkup(),
      headerTemplate: "<div></div>",
    });

    // Closing the puppeteer browser instance
    await browser.close();
  } catch (error) {
    console.error(error);
  }
}

module.exports = { createPdf };


================================================
FILE: misc/playground/cli/spike/HackerNews/renderer/pdf/index.js
================================================
const { renderTemplate } = require("../render-template");
const { createPdf } = require("./createpdf");


async function generatePDF(data, outputPath) {

  const parameter ={Story: data};
  // creates the html content
  const htmlContent = await renderTemplate(
    parameter,
    "template"
  );

  // creates the pdf from html and saves it to Twindle.pdf
   await createPdf(outputPath, htmlContent);

  return;
}
//generatePDF()
module.exports = { generatePDF };

================================================
FILE: misc/playground/cli/spike/HackerNews/renderer/render-template.js
================================================
const { readFile, writeFile } = require("fs").promises;
const hbs = require("handlebars");
const { tmpdir } = require("os");
const { join } = require("path");

/**
 * Renders the html template with the given data and returns the html string
 * @param {CustomTweetsObject} data
 * @param {string} templateName
 */
async function renderTemplate(data, templateName) {
  const html = await readFile(`${__dirname}/template/${templateName}.hbs`, "utf-8");

  // creates the Handlebars template object
  const template = hbs.compile(html, {
    strict: true,
  });

  // renders the html template with the given data
  const rendered = template(data);

  const tmpPath = join(tmpdir(), "hello.html");
  await writeFile(tmpPath, rendered, "utf-8");
  await writeFile(tmpdir() + "/x.json", JSON.stringify(data, null, 2), "utf-8");
  console.log("rendered saved to ", tmpPath);
  return rendered;
  
}
module.exports = { renderTemplate};

================================================
FILE: misc/playground/cli/spike/HackerNews/renderer/template/template.hbs
================================================
<html>

<head>
    <meta charset="UTF-8">

</head>

<body>
    <h1 id="title">
        <center>Stories from Hacker News</center>
    </h1>

    <ul>
        {{!-- discussion forum HN --}}
        {{#each Story }}
        <div class="StoryHeader">
            <h1><a href={{Website}}>{{Story}}</a></h1>
            <div><span>{{Date}}</span></div>

        </div>
        <div class="Discussion" {{#if discussion}} discussion: {{{discussion}}} html-escaped: {{discussion}} </div>
            {{/if}}
        {{/each}}
    </ul>
</body>

</html>

================================================
FILE: misc/playground/cli/spike/README.md
================================================
# Spike or POC


================================================
FILE: misc/playground/cli/spike/cli-epub/.gitignore
================================================
#node modules
node_modules/

#ebook files
*.mobi
*.pdf
*.epub

================================================
FILE: misc/playground/cli/spike/cli-epub/epub.js
================================================
import epub from 'epub-gen';

const options = {
   title: 'The Hello World',
   author: 'Hello MacWorld',
   content: [
     {
       title: 'Chapter 1: First Hello',
       data: `<p>
       Lorem Ipsum dolor sit amet, consectetur adipsicing elite. Got it? Neither did we. In the publishing and design industries, “lorem ipsum” is used as dummy text in visual designs. Using placeholder copy like this helps designers and clients alike focus on layout, imagery, typography, and design rather than on the actual wording of content.

       Dummy copy is great, but what’s with all the Latin? Turns out, the original Lorem Ipsum comes from bits and pieces of Cicero’s De Finibus bonorum et Malorum (On the Ends of Goods and Evils).
       </p>`
     }
   ]
 };

 export function generateEpub (directory) {
    return new epub(options, directory)
 }

================================================
FILE: misc/playground/cli/spike/cli-epub/index.js
================================================
import yargs from 'yargs';
import { hideBin } from 'yargs/helpers';
import { generateEpub } from "./epub.js";

const options = yargs(hideBin(process.argv))
   .usage("Usage: -o <file format> -n <filename>")
   .option({
	o: {
		alias: "output",
		demandOption: false,
      describe: "Output file format",
		choices: ["mobi", "epub", "pdf"],
      type: "string",
      default: "epub",
	},
	n: {
		alias: "filename",
		demandOption: true,
		describe: "Filename for the output file",
		type: "string",
	},
}).argv;

switch (options.output) {
	case 'epub':
		generateEpub(`./${options.filename}.epub`);
		break;
	case 'pdf':
		console.log('Sorry this format is not supported yet')
		break;
	case 'mobi':
		console.log('Sorry this format is not supported yet')
		break;
	default:
		break;
}


================================================
FILE: misc/playground/cli/spike/cli-epub/package.json
================================================
{
  "name": "cli-epub",
  "version": "1.0.0",
  "description": "Generate cli from text input",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "billgufran",
  "license": "ISC",
  "dependencies": {
    "epub-gen": "^0.1.0",
    "yargs": "^16.1.0"
  },
  "type": "module"
}


================================================
FILE: misc/playground/cli/spike/cli-epub/readme.md
================================================
To start

`node index -o <file format> -n <filename>`

Options:
```
      --help        Show help
      --version     Show version number                                  
  -o, --output      Output file format
                     [string] [choices: "mobi", "epub", "pdf"] [default: "epub"]
  -n, --filename  Filename for the output file               [string] [required]
 ```

It only support epub for now.


================================================
FILE: misc/playground/cli/spike/cli-example-esm/.gitignore
================================================
#node modules
node_modules/


================================================
FILE: misc/playground/cli/spike/cli-example-esm/index.js
================================================
import axios from 'axios';

const getBreeds = async () => {
  try {
    return await axios.get('https://dog.ceo/api/breeds/list/all')
  } catch (error) {
    console.error(error)
  }
}

const countBreeds = async () => {
  const breeds = await getBreeds()

  if (breeds.data.message) {
    console.log(`Got ${Object.entries(breeds.data.message).length} breeds`)
  }
}

countBreeds()


================================================
FILE: misc/playground/cli/spike/cli-example-esm/package.json
================================================
{
  "name": "cli-example-esm",
  "version": "1.0.0",
  "description": "Example of how to use ES6+ syntax to run node scripts",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node -r esm index.js"
  },
  "keywords": [],
  "author": "Aravind",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.20.0",
    "esm": "^3.2.25"
  }
}


================================================
FILE: misc/playground/cli/spike/cli-example-esm/readme.md
================================================
### Intro
This playground script is to give proof of concept idea to show we can write ES6+ syntax in JS files and run with Node.

This script has:
- Import statement
- Async/Await syntax instead of a regular promise.

### Instructions
To start

`npm start` or `yarn start`

Package.json has a start script that's defined as:
`node -r esm index.js`

For more options on esm, read here: https://www.npmjs.com/package/esm#options



================================================
FILE: misc/playground/cli/spike/json-to-pdf-cli/Readme.md
================================================
# Theme

 - Simple nodejs CLI application for convert the JSON files to PDF

# Requirements

 - Node.js 10.x.x

# workflow
  - Convert JSON to HTML
  - Convert HTML to PDF

# npm modules used

  - # create-html
        used to convert content to html file
  - # mustache
         Mustache is a logic-less template syntax. It can be used for HTML, config files, source code - anything
  - # html-to-pdf
        used to convert a html file to pdf

### Installation

Install the dependencies:
- npm i
- npm start

### Options:  
Options:  

--version: Show version number  

-o, --option: twindle command line options, choices ['pdf', 'epub', 'mobi', 'md'] 

-f, --file path: file path of the json that is to be converted  

-h, --help: Show help        

# Usage
`node script -f <file path of the json> -o <file type>`

# Example:
`node script -f ./twit_thread.json -o pdf`  
PDF Succesfully saved in F:\Projects\JS\Twindle\fetch-json-data\output.pdf


================================================
FILE: misc/playground/cli/spike/json-to-pdf-cli/output.css
================================================
#title {
  text-align: center;
}

ul li {
  list-style: none;
}

.tweetContainer {
  display: flex;
  flex-direction: column;
  margin-bottom: 30px;
  border-style: solid;
  padding: 20px;
}

.tweetContainer * {
  margin: 0;
  padding: 0;
}

.tweetContainer .header {
  display: flex;
  flex-direction: row;
  align-items: center;
  margin-bottom: 10px;
}

.tweetContainer .header img {
  width: 75px;
  height: 75px;
  border-radius: 50%;
  margin-right: 10px;
}

.tweetContainer .header > div {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;
}

.tweetContainer .header > div p {
  font-size: 14px;
}

.tweetContainer .header > div span {
  font-style: italic;
  color: rgb(45, 45, 45);
}


================================================
FILE: misc/playground/cli/spike/json-to-pdf-cli/output.html
================================================
<!doctype html>
<html lang="en" dir="ltr">
<head>
<title>Twindle</title>
<meta charset="utf-8">


<link rel="stylesheet" href="output.css">


</head>
<body>
<div>
<h1 id="title">Twindle</h1>
    <ul>
        <li>
            <div class="tweetContainer">
                <div class="header">
                    <img src="https:&#x2F;&#x2F;pbs.twimg.com&#x2F;profile_images&#x2F;1256841238298292232&#x2F;ycqwaMI2_400x400.jpg" alt="Pranav" />
                    <div>
                        <h3>Pranav - <span>@Pranav</span></h3>
                        <p><span></span></p>
                    </div>
                </div>
                <p>How to Get Rich (without getting lucky) in the world:</p>
            </div>
        </li>
        <li>
            <div class="tweetContainer">
                <div class="header">
                    <img src="https:&#x2F;&#x2F;pbs.twimg.com&#x2F;profile_images&#x2F;1256841238298292232&#x2F;ycqwaMI2_400x400.jpg" alt="naval" />
                    <div>
                        <h3>Naval - <span>@naval</span></h3>
                        <p><span></span></p>
                    </div>
                </div>
                <p>Seek wealth, not money or status. Wealth is having assets that earn while you sleep. Money is how we transfer time and wealth. Status is your place in the social hierarchy.</p>
            </div>
        </li>
        <li>
            <div class="tweetContainer">
                <div class="header">
                    <img src="https:&#x2F;&#x2F;pbs.twimg.com&#x2F;profile_images&#x2F;1256841238298292232&#x2F;ycqwaMI2_400x400.jpg" alt="naval" />
                    <div>
                        <h3>Naval - <span>@naval</span></h3>
                        <p><span></span></p>
                    </div>
                </div>
                <p>Understand that ethical wealth creation is possible. If you secretly despise wealth, it will elude you.</p>
            </div>
        </li>
        <li>
            <div class="tweetContainer">
                <div class="header">
                    <img src="https:&#x2F;&#x2F;pbs.twimg.com&#x2F;profile_images&#x2F;1256841238298292232&#x2F;ycqwaMI2_400x400.jpg" alt="naval" />
                    <div>
                        <h3>Naval - <span>@naval</span></h3>
                        <p><span></span></p>
                    </div>
                </div>
                <p>Ignore people playing status games. They gain status by attacking people playing wealth creation games.</p>
            </div>
        </li>

    </ul>
</div>  


</body>
</html>


================================================
FILE: misc/playground/cli/spike/json-to-pdf-cli/package.json
================================================
{
  "name": "fetch-json-data",
  "version": "1.0.0",
  "description": "convert json data to pdf",
  "main": "script.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "PraveenKumar",
  "license": "ISC",
  "dependencies": {
    "create-html": "^4.1.0",
    "html-to-pdf": "^0.1.11",
    "jquery": "^3.5.1",
    "mustache": "^4.0.1",
    "yargs": "^16.1.0"
  }
}

================================================
FILE: misc/playground/cli/spike/json-to-pdf-cli/script.js
================================================
const Mustache = require("mustache");
const fs = require("fs");
const createHTML = require("create-html");
const htmlToPdf = require("html-to-pdf");
const yargs = require("yargs");
const { resolve } = require("path");

const args = yargs
  .options({
    o: {
      alias: "option",
      describe:
        "twindle command line options\n choices 'pdf', 'epub', 'mobi', 'md'",
      demandOption: true,
    },
    f: {
      alias: "file path",
      describe: "file path of json to be converted to pdf",
      demandOption: true,
    },
  })
  .help()
  .alias("help", "h")
  .usage("node script -f <file name> -o <file type>").argv;

if (args["o"] === "pdf" && fs.existsSync(resolve(args["f"]))) {
  console.log("JSON file is available in the path " + resolve(args["f"]));
  main();
} else {
  console.log("PDF only supported " + args["o"]);
}

function main() {
  data = require("./twit_thread.json");
  //console.log(data);
  let tweetData = {
    tweets: data,
  };
  getHtml(tweetData);
}

function getHtml(tweetData) {
  //console.log("TweetData", tweetData);
  //get external mustache template
  fs.readFile("tweet_template.mustache", "utf8", function (err, data) {
    if (err) {
      console.log(err);
      return;
    }
    //render the View data in the Mustache template
    let info = Mustache.render(data, tweetData);
    //create an HTMLContent
    let htmlContent = createHTML({
      title: "Twindle",
      body: info,
      css: "output.css", //external css
    });
    getPdf(htmlContent);
  });
}

function getPdf(htmlContent) {
  //console.log("HTML ",htmlContent);
  //create html file and write the htmlcontent which we are getting from Mustache template
  fs.writeFile("output.html", htmlContent, function (err) {
    if (err) {
      console.log(err);
      return;
    }
  });
  //convert the HTML Content/HTML Page to PDF
  htmlToPdf.convertHTMLFile("output.html", "output.pdf", function (error) {
    if (error) {
      console.log("Error Occured ", error);
      return;
    }
    console.log("PDF Succesfully saved in " + process.cwd() + "\\output.pdf");
  });
}


================================================
FILE: misc/playground/cli/spike/json-to-pdf-cli/tweet_template.mustache
================================================
<div>
<h1 id="title">Twindle</h1>
    <ul>
        {{!-- uses the twit mock object from mock API --}}
        {{#tweets}}
        <li>
            <div class="tweetContainer">
                <div class="header">
                    <img src="{{image}}" alt="{{twitterHandle}}" />
                    <div>
                        <h3>{{name}} - <span>@{{twitterHandle}}</span></h3>
                        <p><span>{{createdAt}}</span></p>
                    </div>
                </div>
                <p>{{tweet}}</p>
            </div>
        </li>
        {{/tweets}}

    </ul>
</div>  


================================================
FILE: misc/playground/cli/spike/json-to-pdf-cli/twit_thread.json
================================================
[
  {
    "name": "Pranav",
    "twitterHandle": "Pranav",
    "image": "https://pbs.twimg.com/profile_images/1256841238298292232/ycqwaMI2_400x400.jpg",
    "createAt": "2018-05-31",
    "tweet": "How to Get Rich (without getting lucky) in the world:"
  },
  {
    "name": "Naval",
    "twitterHandle": "naval",
    "image": "https://pbs.twimg.com/profile_images/1256841238298292232/ycqwaMI2_400x400.jpg",
    "createAt": "2018-05-31",
    "tweet": "Seek wealth, not money or status. Wealth is having assets that earn while you sleep. Money is how we transfer time and wealth. Status is your place in the social hierarchy."
  },
  {
    "name": "Naval",
    "twitterHandle": "naval",
    "image": "https://pbs.twimg.com/profile_images/1256841238298292232/ycqwaMI2_400x400.jpg",
    "createAt": "2018-05-31",
    "tweet": "Understand that ethical wealth creation is possible. If you secretly despise wealth, it will elude you."
  },
   {
    "name": "Naval",
    "twitterHandle": "naval",
    "image": "https://pbs.twimg.com/profile_images/1256841238298292232/ycqwaMI2_400x400.jpg",
    "createAt": "2018-05-31",
    "tweet": "Ignore people playing status games. They gain status by attacking people playing wealth creation games."
  }
]

================================================
FILE: misc/playground/cli/spike/markdown/index.js
================================================
const markdown = (name , tweet , url , username)=>{
return(
  '### ' + tweet + '\n'+'![img]('+url+')'+'\n'+name+' | '+username
)
}
console.log(
  markdown('naval','How to Get Rich (without getting lucky)','https://pbs.twimg.com/profile_images/1256841238298292232/ycqwaMI2_400x400.jpg','@naval')
)


================================================
FILE: misc/playground/cli/spike/pdf-from-html-cli/README.md
================================================
# Creating PDFs from HTML using Puppeteer

## This simple module creates pdf documents using tweet threads

### To Run

```shell
yarn start
```

outputs `Twindle.pdf`

### How it works

-   First, handlebars module creates the html with the given tweets

-   Then, we convert and save the html file as pdf document using puppeteer.

### Example documents

And example pdf document and the static version of the handlebar template can be found in `examples`


================================================
FILE: misc/playground/cli/spike/pdf-from-html-cli/create-pdf.js
================================================
const puppeteer = require("puppeteer");
const fs = require("fs");

// Creates a pdf document from htmlContent and saves it to outputPath
async function createPdf(outputPath, htmlContent) {
	// launchs a puppeteer browser instance and opens a new page
	const browser = await puppeteer.launch();
	const page = await browser.newPage();

	// sets the html of the page to htmlContent argument
	await page.setContent(htmlContent);

	// Prints the html page to pdf document and saves it to given outputPath
	await page.emulateMediaType("print");
	await page.pdf({ path: outputPath, format: "A4" });

	// Closing the puppeteer browser instance
	await browser.close();
}

module.exports = createPdf;


================================================
FILE: misc/playground/cli/spike/pdf-from-html-cli/examples/Twindle.html
================================================
<style type="text/css">
    * {
        font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans",
            "Helvetica Neue", sans-serif;
    }

    body {
        margin: 5% auto;
    }

    #title {
        text-align: center;
    }

    ul {
        list-style-type: none;
        display: flex;
        align-items: center;
        flex-direction: column;
    }

    ul li {
        margin: 20px;
    }

    .tweetContainer {
        display: flex;
        flex-direction: column;
    }

    .tweetContainer * {
        margin: 0;
        padding: 0;
    }

    .tweetContainer .header {
        display: flex;
        flex-direction: row;
        align-items: center;
        margin-bottom: 10px;
    }

    .tweetContainer .header img {
        width: 75px;
        height: 75px;
        border-radius: 50%;

        margin-right: 10px;
    }

    .tweetContainer .header>div {
        display: flex;
        flex-direction: column;
        align-items: flex-start;
        justify-content: center;
    }

    .tweetContainer .header>div p {
        font-size: 14px;
    }

    .tweetContainer .header>div span {
        font-style: italic;
        color: rgb(45, 45, 45);
    }
</style>
<html>

<body>
    <h1 id="title">Twindle Thread</h1>

    <ul>
        <li>
            <div class="tweetContainer">
                <div class="header">
                    <img src="https://pbs.twimg.com/profile_images/1256841238298292232/ycqwaMI2_400x400.jpg" alt="naval" />
                    <div>
                        <h3>Naval - <span>@naval</span></h3>
                        <p><span>2018-05-31</span></p>
                    </div>
                </div>
                <p>How to Get Rich (without getting lucky):</p>
            </div>
        </li>
        <li>
            <div class="tweetContainer">
                <div class="header">
                    <img src="https://pbs.twimg.com/profile_images/1256841238298292232/ycqwaMI2_400x400.jpg" alt="naval" />
                    <div>
                        <h3>Naval - <span>@naval</span></h3>
                        <p><span>2018-05-31</span></p>
                    </div>
                </div>
                <p>How to Get Rich (without getting lucky):</p>
            </div>
        </li>
        <li>
            <div class="tweetContainer">
                <div class="header">
                    <img src="https://pbs.twimg.com/profile_images/1256841238298292232/ycqwaMI2_400x400.jpg" alt="naval" />
                    <div>
                        <h3>Naval - <span>@naval</span></h3>
                        <p><span>2018-05-31</span></p>
                    </div>
                </div>
                <p>How to Get Rich (without getting lucky):</p>
            </div>
        </li>

    </ul>
</body>

</html>

================================================
FILE: misc/playground/cli/spike/pdf-from-html-cli/index.js
================================================
const renderTemplate = require("./render-template");
const creat
Download .txt
gitextract_rvcqqkjj/

├── .all-contributorsrc
├── .github/
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── TEMP_ISSUE_TEMPLATE.md
│   └── workflows/
│       ├── conflict.yml
│       ├── stale.yml
│       └── tests.yml
├── .gitignore
├── CNAME
├── LICENSE
├── README.md
├── misc/
│   ├── CONTRIBUTING.md
│   ├── docs/
│   │   ├── CHEATSHEET.md
│   │   ├── CODE-REVIEW-CHECKLIST.md
│   │   ├── FAQ.md
│   │   ├── NAMING-CONVENTIONS.md
│   │   ├── ONBOARDING.md
│   │   ├── README.md
│   │   ├── RESOURCES.md
│   │   ├── TEAM.md
│   │   ├── TWINDLE.md
│   │   ├── TWITTER.md
│   │   ├── articles/
│   │   │   ├── Process-for-new-contributors.md
│   │   │   ├── README.md
│   │   │   ├── creating-first-pull-request.md
│   │   │   ├── design-guide-for-good-logo.md
│   │   │   ├── git -github-related.md
│   │   │   ├── handlebar-explained.md
│   │   │   ├── javascript-code.md
│   │   │   ├── pr-clean-commits.md
│   │   │   ├── puppeteer-explained.md
│   │   │   ├── setup-prettier-vscode.md
│   │   │   ├── solving-forked-commit-ahead.md
│   │   │   ├── sync-to-main-repo-using-git-bash.md
│   │   │   ├── sync-to-main-repo-using-pull-request.md
│   │   │   └── sync-to-main-repo.md
│   │   └── images/
│   │       └── README.md
│   ├── firstpr/
│   │   ├── abdu_masoudi.md
│   │   ├── abhilash_s_s.md
│   │   ├── ad3rinto.md
│   │   ├── adewale.md
│   │   ├── aditya.md
│   │   ├── aditya20233.md
│   │   ├── aditya786.md
│   │   ├── akshay.md
│   │   ├── alejandra_pinto.md
│   │   ├── alexis.md
│   │   ├── ali.md
│   │   ├── andrei.md
│   │   ├── anujshukla.md
│   │   ├── aparna.md
│   │   ├── aravind.md
│   │   ├── arthurbuhl.md
│   │   ├── ashish.md
│   │   ├── baijanath.md
│   │   ├── bill.md
│   │   ├── blessing.md
│   │   ├── can.md
│   │   ├── chimdie.md
│   │   ├── codekumar.md
│   │   ├── daniel.md
│   │   ├── davabalan.md
│   │   ├── deepak.md
│   │   ├── deepak1_try2.md
│   │   ├── edori.md
│   │   ├── edwin.md
│   │   ├── eyram.md
│   │   ├── fabio.md
│   │   ├── franklinulrich.md
│   │   ├── fusen.md
│   │   ├── habeeb.md
│   │   ├── harsha.md
│   │   ├── ibrahim.md
│   │   ├── jahid.md
│   │   ├── jaki.md
│   │   ├── jesulayomi.md
│   │   ├── jilva.md
│   │   ├── joel_vinay_kumar.md
│   │   ├── karan.md
│   │   ├── karan_khosla.md
│   │   ├── kenny.md
│   │   ├── kingsley_victor.md
│   │   ├── kiran_don.md
│   │   ├── krishnadevz.md
│   │   ├── krypton.md
│   │   ├── lara_noomene.md
│   │   ├── layomi.md
│   │   ├── lilfatfrank.md
│   │   ├── liviza.md
│   │   ├── lorennale.md
│   │   ├── lukmanokunade.md
│   │   ├── luli.md
│   │   ├── manohar.md
│   │   ├── manuel_alejandro.md
│   │   ├── marcus.md
│   │   ├── maria_rivera.md
│   │   ├── mbui.md
│   │   ├── melissa_huerta.md
│   │   ├── michael.md
│   │   ├── mumbi.md
│   │   ├── nahuel.md
│   │   ├── nailah.md
│   │   ├── naveen.md
│   │   ├── neaz_mahmood.md
│   │   ├── nishank.md
│   │   ├── nitin_kadam.md
│   │   ├── nivetha.md
│   │   ├── omolo.md
│   │   ├── paniagua.md
│   │   ├── pavan.md
│   │   ├── pr_m.md
│   │   ├── prajwal.md
│   │   ├── pranav.md
│   │   ├── prasanna.md
│   │   ├── praveen.md
│   │   ├── pravin.md
│   │   ├── predrag_stamenkovic.md
│   │   ├── prem.md
│   │   ├── proful.md
│   │   ├── puru.md
│   │   ├── rafael.md
│   │   ├── rajesh_prajapati.md
│   │   ├── rakesh.md
│   │   ├── rohitsawai.md
│   │   ├── sachin.md
│   │   ├── samriddhi.md
│   │   ├── samueladeniyi.md
│   │   ├── sarvesh.md
│   │   ├── sasmita.md
│   │   ├── satyaki.md
│   │   ├── saurabh_srivastava.md
│   │   ├── scott.md
│   │   ├── sheetal.md
│   │   ├── shekharranjan.md
│   │   ├── simrin_joshi.md
│   │   ├── sippeybro.md
│   │   ├── sravan.md
│   │   ├── sunny.md
│   │   ├── suraj.md
│   │   ├── swatirao.md
│   │   ├── teckiegeek.md
│   │   ├── therealjimoh.md
│   │   ├── titi_olopade.md
│   │   ├── tolga.md
│   │   ├── trombley.md
│   │   ├── tushar.md
│   │   ├── tusharkandpal.md
│   │   ├── varad.md
│   │   ├── vera_nkanmuo.md
│   │   ├── vijaya.md
│   │   ├── vipin.md
│   │   ├── viraj_patil.md
│   │   ├── wamuyuwanjohi
│   │   └── yash.md
│   ├── playground/
│   │   ├── cli/
│   │   │   ├── README.md
│   │   │   └── spike/
│   │   │       ├── HackerNews/
│   │   │       │   ├── code.js
│   │   │       │   ├── code2.js
│   │   │       │   ├── mainindex.js
│   │   │       │   └── renderer/
│   │   │       │       ├── index.js
│   │   │       │       ├── pdf/
│   │   │       │       │   ├── createpdf.js
│   │   │       │       │   └── index.js
│   │   │       │       ├── render-template.js
│   │   │       │       └── template/
│   │   │       │           └── template.hbs
│   │   │       ├── README.md
│   │   │       ├── cli-epub/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── epub.js
│   │   │       │   ├── index.js
│   │   │       │   ├── package.json
│   │   │       │   └── readme.md
│   │   │       ├── cli-example-esm/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── index.js
│   │   │       │   ├── package.json
│   │   │       │   └── readme.md
│   │   │       ├── json-to-pdf-cli/
│   │   │       │   ├── Readme.md
│   │   │       │   ├── output.css
│   │   │       │   ├── output.html
│   │   │       │   ├── package.json
│   │   │       │   ├── script.js
│   │   │       │   ├── tweet_template.mustache
│   │   │       │   └── twit_thread.json
│   │   │       ├── markdown/
│   │   │       │   └── index.js
│   │   │       ├── pdf-from-html-cli/
│   │   │       │   ├── README.md
│   │   │       │   ├── create-pdf.js
│   │   │       │   ├── examples/
│   │   │       │   │   └── Twindle.html
│   │   │       │   ├── index.js
│   │   │       │   ├── package.json
│   │   │       │   ├── render-template.js
│   │   │       │   └── templates/
│   │   │       │       └── Thread.hbs
│   │   │       ├── pdf-from-json/
│   │   │       │   ├── Readme.md
│   │   │       │   ├── index.js
│   │   │       │   └── package.json
│   │   │       ├── phase2-server/
│   │   │       │   ├── api/
│   │   │       │   │   └── index.js
│   │   │       │   ├── config/
│   │   │       │   │   └── index.js
│   │   │       │   ├── environment.js
│   │   │       │   ├── index.js
│   │   │       │   ├── middlewares/
│   │   │       │   │   ├── index.js
│   │   │       │   │   ├── request-logger.js
│   │   │       │   │   └── twitter.js
│   │   │       │   ├── package.json
│   │   │       │   └── router/
│   │   │       │       ├── api/
│   │   │       │       │   └── index.js
│   │   │       │       ├── index.js
│   │   │       │       └── pages/
│   │   │       │           └── index.js
│   │   │       ├── simple-pdf-to-json/
│   │   │       │   ├── README.md
│   │   │       │   ├── json2pdf.html
│   │   │       │   ├── json2pdf.js
│   │   │       │   └── simple-pdf-to-json/
│   │   │       │       ├── newjson2pdf.css
│   │   │       │       ├── newjson2pdf.html
│   │   │       │       ├── newjson2pdf.js
│   │   │       │       └── old codes/
│   │   │       │           ├── oldjson2pdf.html
│   │   │       │           └── oldjson2pdf.js
│   │   │       ├── twindle-cli-node/
│   │   │       │   ├── README.md
│   │   │       │   ├── package.json
│   │   │       │   └── twindle.js
│   │   │       ├── twindle-hello-world-pdf/
│   │   │       │   ├── package.json
│   │   │       │   └── pdf.js
│   │   │       ├── twindle-thread/
│   │   │       │   ├── Readme.md
│   │   │       │   ├── script.js
│   │   │       │   └── twit_thread.json
│   │   │       └── twitter-api/
│   │   │           ├── README.md
│   │   │           ├── package.json
│   │   │           ├── responses/
│   │   │           │   ├── response-version1-searchendpoint.json
│   │   │           │   ├── response-version1-user-timeline.json
│   │   │           │   ├── response-version2-conversation.json
│   │   │           │   └── response-version2-tweetthread.json
│   │   │           ├── script-version1-searchendpoint.js
│   │   │           ├── script-version1-usertimeline.js
│   │   │           └── script-version2-conversation.js
│   │   ├── mock/
│   │   │   ├── README.md
│   │   │   ├── twit-thread.json
│   │   │   ├── twitter-recent-search-api-response.json
│   │   │   └── twitter-tweet-api-response.json
│   │   ├── tests/
│   │   │   ├── github/
│   │   │   │   ├── giturl.unit.test.js
│   │   │   │   └── repo.unit.test.js
│   │   │   └── twitter/
│   │   │       ├── api.test.js
│   │   │       ├── unit/
│   │   │       │   ├── api/
│   │   │       │   │   ├── helpers/
│   │   │       │   │   │   └── fetch.unit.test.js
│   │   │       │   │   └── twitter-endpoints/
│   │   │       │   │       ├── search.unit.test.js
│   │   │       │   │       └── tweets.unit.test.js
│   │   │       │   └── transformations/
│   │   │       │       └── helpers.unit.test.js
│   │   │       └── utils.test.js
│   │   └── twindleco/
│   │       ├── header/
│   │       │   ├── header1/
│   │       │   │   ├── header1.css
│   │       │   │   └── header1.html
│   │       │   ├── header2/
│   │       │   │   ├── header2.css
│   │       │   │   └── header2.html
│   │       │   ├── header3/
│   │       │   │   ├── header3.css
│   │       │   │   └── header3.html
│   │       │   ├── header4/
│   │       │   │   └── public/
│   │       │   │       ├── index.html
│   │       │   │       └── style.css
│   │       │   ├── header5/
│   │       │   │   ├── header_twindle.css
│   │       │   │   └── header_twindle.html
│   │       │   ├── header6/
│   │       │   │   ├── header6.css
│   │       │   │   └── header6.html
│   │       │   └── header7/
│   │       │       ├── header7.css
│   │       │       └── header7.html
│   │       ├── header8/
│   │       │   ├── header8.css
│   │       │   └── header8.html
│   │       ├── homepage/
│   │       │   ├── homepage1/
│   │       │   │   ├── Twindle Home Page.html
│   │       │   │   └── style.css
│   │       │   ├── homepage2/
│   │       │   │   ├── README.md
│   │       │   │   ├── index.html
│   │       │   │   ├── index.js
│   │       │   │   ├── style.css
│   │       │   │   └── style.scss
│   │       │   ├── homepage3/
│   │       │   │   ├── index.css
│   │       │   │   └── index.html
│   │       │   ├── homepage4/
│   │       │   │   ├── index.html
│   │       │   │   └── styles.css
│   │       │   ├── homepage6/
│   │       │   │   ├── home.css
│   │       │   │   └── home.html
│   │       │   └── homepage7/
│   │       │       ├── index.html
│   │       │       └── style.css
│   │       ├── readme.md
│   │       └── team/
│   │           └── team1/
│   │               ├── index.html
│   │               └── style.css
│   ├── twindle-thread/
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── backend/
│   │   │   ├── README.md
│   │   │   ├── common.d.ts
│   │   │   ├── index.js
│   │   │   ├── jsconfig.json
│   │   │   ├── package.json
│   │   │   └── src/
│   │   │       ├── add-thread.js
│   │   │       ├── error/
│   │   │       │   ├── api.js
│   │   │       │   ├── base.js
│   │   │       │   ├── index.js
│   │   │       │   └── validation.js
│   │   │       ├── get-thread-data.js
│   │   │       ├── get-threads-list.js
│   │   │       ├── helpers/
│   │   │       │   ├── connection.js
│   │   │       │   ├── error.js
│   │   │       │   ├── score.js
│   │   │       │   └── setup-db.sql
│   │   │       └── twitter/
│   │   │           ├── constants.js
│   │   │           ├── helpers/
│   │   │           │   └── fetch.js
│   │   │           ├── index.js
│   │   │           ├── twitter-endpoints/
│   │   │           │   └── tweets.js
│   │   │           ├── types.d.ts
│   │   │           └── types.js
│   │   ├── jsconfig.json
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── css/
│   │   │   │   ├── global.css
│   │   │   │   └── theme.css
│   │   │   ├── index.html
│   │   │   └── robots.txt
│   │   ├── snowpack.config.js
│   │   ├── src/
│   │   │   ├── App.svelte
│   │   │   ├── components/
│   │   │   │   ├── Avatar.svelte
│   │   │   │   ├── Button.svelte
│   │   │   │   ├── IconButton.svelte
│   │   │   │   ├── list/
│   │   │   │   │   ├── List.svelte
│   │   │   │   │   ├── ListItem.svelte
│   │   │   │   │   └── listElStore.js
│   │   │   │   └── utils/
│   │   │   │       └── AppIcon.svelte
│   │   │   ├── constants.js
│   │   │   ├── helpers/
│   │   │   │   └── fetch.js
│   │   │   ├── index.js
│   │   │   └── pages/
│   │   │       └── Feed.svelte
│   │   ├── types.d.ts
│   │   ├── types.js
│   │   └── workbox-config.js
│   └── twindle-web/
│       ├── .prettierrc
│       ├── README.md
│       ├── dark-theme.css
│       ├── index.html
│       ├── index.js
│       ├── scripts/
│       │   ├── header.js
│       │   └── testimonials.js
│       ├── style.css
│       └── team_details/
│           ├── README.md
│           ├── data.json
│           ├── team_details.css
│           ├── team_details.html
│           └── team_details.js
└── twindle-cli/
    ├── .gitignore
    ├── .prettierrc
    ├── README.md
    ├── jsconfig.json
    ├── package.json
    └── src/
        ├── cli.js
        ├── common.d.ts
        ├── env.js
        ├── fileOpener.js
        ├── github/
        │   └── githubparse/
        │       ├── app.js
        │       ├── convert.js
        │       └── jsonFetchData.js
        ├── hacker-news/
        │   ├── code.js
        │   └── hn.test.js
        ├── helpers/
        │   ├── error.js
        │   └── logger.js
        ├── index.js
        ├── readability/
        │   └── index.js
        ├── renderer/
        │   ├── epub/
        │   │   ├── epub.js
        │   │   ├── index.js
        │   │   └── render-template.js
        │   ├── index.js
        │   ├── md/
        │   │   ├── README.md
        │   │   └── index.js
        │   ├── mobi/
        │   │   ├── README.md
        │   │   └── index.js
        │   └── pdf/
        │       ├── create-pdf.js
        │       ├── examples/
        │       │   └── Twindle.html
        │       ├── index.js
        │       └── render-template.js
        ├── setup/
        │   └── init.js
        ├── spinner.js
        ├── twindle.js
        ├── twitter/
        │   ├── api/
        │   │   ├── constants.js
        │   │   ├── helpers/
        │   │   │   └── fetch.js
        │   │   ├── index.js
        │   │   └── twitter-endpoints/
        │   │       ├── search.js
        │   │       ├── tweets.js
        │   │       └── user_timeline.js
        │   ├── error/
        │   │   ├── api.js
        │   │   ├── base.js
        │   │   ├── index.js
        │   │   └── validation.js
        │   ├── index.js
        │   ├── mock/
        │   │   ├── delete-if-not-needed/
        │   │   │   ├── data.js
        │   │   │   └── dataaa.js
        │   │   ├── twitter-mock-responses/
        │   │   │   ├── images-text.json
        │   │   │   ├── mock.json
        │   │   │   └── only-links.json
        │   │   └── twitter-responses/
        │   │       ├── gif-retweet.json
        │   │       ├── only-images.json
        │   │       ├── only-text.json
        │   │       ├── response-version2-tweetthread.json
        │   │       ├── squirrel-pumpkin.json
        │   │       └── username-hashtag.json
        │   ├── scraping/
        │   │   └── index.js
        │   ├── transformations/
        │   │   ├── helpers.js
        │   │   ├── helpers.test.js
        │   │   ├── rich-rendering.js
        │   │   ├── rich-rendering.test.js
        │   │   ├── search-endpoint.js
        │   │   ├── tweet-endpoint.js
        │   │   ├── tweets-array-Endpoint.test.js
        │   │   ├── tweets-array-endpoint.js
        │   │   ├── user-timeline-Endpoint.test.js
        │   │   └── user-timeline-endpoint.js
        │   ├── twitter.js
        │   ├── utils/
        │   │   ├── date.js
        │   │   └── date.test.js
        │   └── validations/
        │       └── tweet-endpoint.js
        ├── types/
        │   └── twitter.ts
        ├── types.js
        └── utils/
            ├── date.js
            ├── env.js
            ├── helpers.js
            ├── helpers.test.js
            ├── image.js
            ├── image.test.js
            ├── library.js
            ├── path.js
            ├── path.test.js
            ├── send-email.js
            └── send-to-kindle.js
Download .txt
SYMBOL INDEX (290 symbols across 80 files)

FILE: misc/playground/cli/spike/HackerNews/code.js
  function searchFor (line 3) | async function searchFor(searchTerm) {
  function captureCommentsId (line 18) | async function captureCommentsId(keyword) {
  function searchForStoriesComments (line 33) | async function searchForStoriesComments(keyword) {
  function dumpEverything (line 46) | async function dumpEverything(keyword) {
  function constructObjectArray (line 64) | async function constructObjectArray(keyword) {
  function spin (line 85) | function spin(array, window) {

FILE: misc/playground/cli/spike/HackerNews/code2.js
  function searchFor (line 3) | async function searchFor() {
  function StoriesOnFrontPage (line 14) | async function StoriesOnFrontPage() {
  function frontComments (line 35) | async function frontComments() {
  function midcomments (line 70) | async function midcomments() {
  function lastlayercomments (line 112) | async function lastlayercomments() {
  function constructObjectArray (line 132) | async function constructObjectArray() {

FILE: misc/playground/cli/spike/HackerNews/mainindex.js
  function news (line 4) | async function news(keyword) {

FILE: misc/playground/cli/spike/HackerNews/renderer/pdf/createpdf.js
  function footerMarkup (line 4) | function footerMarkup() {
  function createPdf (line 21) | async function createPdf(outputPath, htmlContent) {

FILE: misc/playground/cli/spike/HackerNews/renderer/pdf/index.js
  function generatePDF (line 5) | async function generatePDF(data, outputPath) {

FILE: misc/playground/cli/spike/HackerNews/renderer/render-template.js
  function renderTemplate (line 11) | async function renderTemplate(data, templateName) {

FILE: misc/playground/cli/spike/cli-epub/epub.js
  function generateEpub (line 18) | function generateEpub (directory) {

FILE: misc/playground/cli/spike/json-to-pdf-cli/script.js
  function main (line 33) | function main() {
  function getHtml (line 42) | function getHtml(tweetData) {
  function getPdf (line 62) | function getPdf(htmlContent) {

FILE: misc/playground/cli/spike/pdf-from-html-cli/create-pdf.js
  function createPdf (line 5) | async function createPdf(outputPath, htmlContent) {

FILE: misc/playground/cli/spike/pdf-from-html-cli/index.js
  function main (line 6) | async function main() {

FILE: misc/playground/cli/spike/pdf-from-html-cli/render-template.js
  function renderTemplate (line 6) | function renderTemplate(data, templateName) {

FILE: misc/playground/cli/spike/phase2-server/api/index.js
  class API (line 3) | class API {
    method getTwitterThread (line 4) | static async getTwitterThread(req, res) {

FILE: misc/playground/cli/spike/simple-pdf-to-json/json2pdf.js
  function displayTable (line 19) | function displayTable(tweets){

FILE: misc/playground/cli/spike/simple-pdf-to-json/simple-pdf-to-json/newjson2pdf.js
  function display (line 27) | function display(_tweet) {

FILE: misc/playground/cli/spike/simple-pdf-to-json/simple-pdf-to-json/old codes/oldjson2pdf.js
  function displayTable (line 19) | function displayTable(tweets){

FILE: misc/playground/cli/spike/twindle-thread/script.js
  function main (line 2) | function main(){

FILE: misc/playground/cli/spike/twitter-api/script-version1-searchendpoint.js
  constant BEARER_TOKEN (line 4) | const BEARER_TOKEN = 'Bearer <Auth_Token_Here>';
  constant TWEET_LOOKUP_ENDPOINT (line 5) | const TWEET_LOOKUP_ENDPOINT = 'https://api.twitter.com/1.1/statuses/show...
  constant SEARCH_ENDPOINT (line 6) | const SEARCH_ENDPOINT = 'https://api.twitter.com/1.1/search/tweets.json?...
  constant SAMPLE_TWEET (line 7) | const SAMPLE_TWEET = 'https://twitter.com/AriBerman/status/1320872258085...
  function getTweetId (line 15) | function getTweetId(tweet_url) {
  function getScreenName (line 19) | function getScreenName(tweet_url) {
  function getURL (line 24) | function getURL(url_type) {
  function getTweets (line 35) | function getTweets(tweet_url) {
  function processResponse (line 43) | function processResponse(url_type, responseJSON) {
  function processTweetLookup (line 50) | function processTweetLookup(responseJSON) {
  function processSearchResponse (line 60) | function processSearchResponse(responseJSON) {
  function getTweetObject (line 74) | function getTweetObject(responseJSON) {
  function getTweetArray (line 78) | function getTweetArray(responseJSON) {
  function getUserObject (line 82) | function getUserObject(responseJSON) {
  function createCustomTweet (line 86) | function createCustomTweet(tweet_object, user_object) {
  function isTweetNotOlderThanSevenDays (line 96) | function isTweetNotOlderThanSevenDays(tweet) {
  function fetchURL (line 108) | async function fetchURL(url, url_type) {

FILE: misc/playground/cli/spike/twitter-api/script-version1-usertimeline.js
  constant BEARER_TOKEN (line 4) | const BEARER_TOKEN = 'Bearer <Auth_Token_Here>';
  constant TWEET_LOOKUP_ENDPOINT (line 5) | const TWEET_LOOKUP_ENDPOINT = 'https://api.twitter.com/1.1/statuses/show...
  constant USER_TIMELINE_ENDPOINT (line 6) | const USER_TIMELINE_ENDPOINT = 'https://api.twitter.com/1.1/statuses/use...
  constant SAMPLE_TWEET (line 7) | const SAMPLE_TWEET = 'https://twitter.com/AriBerman/status/1320872258085...
  function getTweetId (line 15) | function getTweetId(tweet_url) {
  function getScreenName (line 19) | function getScreenName(tweet_url) {
  function getURL (line 24) | function getURL(url_type) {
  function getTweets (line 35) | function getTweets(tweet_url) {
  function processResponse (line 43) | function processResponse(url_type, responseJSON) {
  function processTweetLookup (line 50) | function processTweetLookup(responseJSON) {
  function processSearchResponse (line 60) | function processSearchResponse(responseJSON) {
  function getTweetObject (line 74) | function getTweetObject(responseJSON) {
  function getTweetArray (line 78) | function getTweetArray(responseJSON) {
  function getUserObject (line 82) | function getUserObject(responseJSON) {
  function createCustomTweet (line 86) | function createCustomTweet(tweet_object, user_object) {
  function isTweetNotOlderThanSevenDays (line 96) | function isTweetNotOlderThanSevenDays(tweet) {
  function fetchURL (line 108) | async function fetchURL(url, url_type) {

FILE: misc/playground/cli/spike/twitter-api/script-version2-conversation.js
  constant BEARER_TOKEN (line 3) | const BEARER_TOKEN = 'Bearer <Auth_Token_Here>';
  constant ENDPOINT_TO_FETCH_CONVERSATION_ID (line 4) | const ENDPOINT_TO_FETCH_CONVERSATION_ID = 'https://api.twitter.com/2/twe...
  constant TWEET_FIELDS (line 5) | const TWEET_FIELDS = '&tweet.fields=attachments,author_id,context_annota...
  constant USER_FIELDS (line 6) | const USER_FIELDS = '&user.fields=created_at,description,entities,locati...
  constant MEDIA_FIELDS (line 7) | const MEDIA_FIELDS = '&media.fields=duration_ms,height,preview_image_url...
  constant POLL_FIELDS (line 8) | const POLL_FIELDS = '&poll.fields=duration_minutes,end_datetime,voting_s...
  constant PLACE_FIELDS (line 9) | const PLACE_FIELDS = '&place.fields=contained_within,country,country_cod...
  constant EXPANSIONS (line 10) | const EXPANSIONS = '&expansions=author_id';
  constant ENDPOINT_TO_FETCH_CONVERSATION_TWEETS (line 11) | const ENDPOINT_TO_FETCH_CONVERSATION_TWEETS = 'https://api.twitter.com/2...
  constant SAMPLE_TWEET (line 12) | const SAMPLE_TWEET = 'https://twitter.com/AriBerman/status/1320872258085...
  function getTweetId (line 20) | function getTweetId(tweet_url) {
  function getScreenName (line 24) | function getScreenName(tweet_url) {
  function getURL (line 29) | function getURL(url_type) {
  function getTweets (line 41) | function getTweets(tweet_url) {
  function processResponse (line 49) | function processResponse(url_type, responseJSON) {
  function processTweetLookup (line 56) | function processTweetLookup(responseJSON) {
  function processSearchResponse (line 68) | function processSearchResponse(responseJSON) {
  function getTweetObject (line 82) | function getTweetObject(responseJSON) {
  function getTweetArray (line 86) | function getTweetArray(responseJSON) {
  function getUserObject (line 90) | function getUserObject(responseJSON) {
  function createCustomTweet (line 94) | function createCustomTweet(tweet_object, user_object) {
  function isTweetNotOlderThanSevenDays (line 106) | function isTweetNotOlderThanSevenDays(tweet) {
  function fetchURL (line 117) | async function fetchURL(url, url_type) {

FILE: misc/twindle-thread/backend/common.d.ts
  type ProcessEnv (line 2) | interface ProcessEnv {

FILE: misc/twindle-thread/backend/src/add-thread.js
  function addThread (line 13) | async function addThread(req, res) {
  function Response (line 136) | function Response(error, message, res) {

FILE: misc/twindle-thread/backend/src/error/api.js
  class NetworkRequestError (line 3) | class NetworkRequestError extends TwitterError {
    method constructor (line 4) | constructor() {
  class TokenNotProvidedError (line 9) | class TokenNotProvidedError extends TwitterError {
    method constructor (line 10) | constructor() {
  class InvalidTokenError (line 15) | class InvalidTokenError extends TwitterError {
    method constructor (line 16) | constructor() {
  class BadTwitterRequestError (line 24) | class BadTwitterRequestError extends TwitterError {
    method constructor (line 25) | constructor() {
  class TwitterServiceError (line 33) | class TwitterServiceError extends TwitterError {
    method constructor (line 34) | constructor() {
  class TweetIDNotProvidedError (line 42) | class TweetIDNotProvidedError extends TwitterError {
    method constructor (line 43) | constructor() {
  class TweetDoesNotExist (line 48) | class TweetDoesNotExist extends TwitterError {
    method constructor (line 49) | constructor() {
  class UserScreenNameInvalid (line 54) | class UserScreenNameInvalid extends TwitterError {
    method constructor (line 55) | constructor() {

FILE: misc/twindle-thread/backend/src/error/base.js
  class TwitterError (line 3) | class TwitterError extends UserError {
    method constructor (line 4) | constructor(name, message) {

FILE: misc/twindle-thread/backend/src/error/validation.js
  class TweetDeletedError (line 3) | class TweetDeletedError extends TwitterError {
    method constructor (line 4) | constructor() {
  class TweetOlderThan7DaysError (line 9) | class TweetOlderThan7DaysError extends TwitterError {
    method constructor (line 10) | constructor() {
  class TweetNotFirstOfThreadError (line 15) | class TweetNotFirstOfThreadError extends TwitterError {
    method constructor (line 16) | constructor() {

FILE: misc/twindle-thread/backend/src/get-thread-data.js
  function getThreadData (line 9) | async function getThreadData(req, res) {
  function Response (line 83) | async function Response(error, message, data, res) {

FILE: misc/twindle-thread/backend/src/get-threads-list.js
  function getThreadsLists (line 15) | async function getThreadsLists(req, res) {
  function Response (line 130) | function Response(error, message, data, res) {

FILE: misc/twindle-thread/backend/src/helpers/connection.js
  function dbInstance (line 8) | async function dbInstance() {

FILE: misc/twindle-thread/backend/src/helpers/error.js
  class UserError (line 3) | class UserError extends Error {
    method constructor (line 9) | constructor(name, message) {

FILE: misc/twindle-thread/backend/src/helpers/score.js
  function calculateTwitterScore (line 11) | function calculateTwitterScore(likes, retweets, repliesCount, dateCreate...

FILE: misc/twindle-thread/backend/src/helpers/setup-db.sql
  type twitter_users (line 3) | CREATE TABLE IF NOT EXISTS twitter_users (
  type twitter_threads (line 10) | CREATE TABLE IF NOT EXISTS twitter_threads (

FILE: misc/twindle-thread/backend/src/twitter/constants.js
  constant TWEET_FIELDS (line 1) | const TWEET_FIELDS =
  constant EXPANSIONS (line 5) | const EXPANSIONS = "&expansions=author_id,attachments.media_keys";
  constant USER_FIELDS (line 6) | const USER_FIELDS =
  constant MEDIA_FIELDS (line 8) | const MEDIA_FIELDS =
  constant PLACE_FIELDS (line 10) | const PLACE_FIELDS = "&place.fields=contained_within,country,country_cod...
  constant POLL_FIELDS (line 11) | const POLL_FIELDS = "&poll.fields=duration_minutes,end_datetime,voting_s...
  constant MAX_RESULTS (line 12) | const MAX_RESULTS = "&max_results=100";

FILE: misc/twindle-thread/backend/src/twitter/twitter-endpoints/tweets.js
  constant BASE_ENDPOINT (line 5) | const BASE_ENDPOINT = "https://api.twitter.com/2/tweets?ids=";

FILE: misc/twindle-thread/backend/src/twitter/types.d.ts
  type Mention (line 1) | interface Mention {
  type Hashtag (line 7) | interface Hashtag {
  type EntityUrl (line 13) | interface EntityUrl {
  type Attachments (line 32) | interface Attachments {
  type User (line 37) | interface User {
  type ConversationResponseData (line 66) | interface ConversationResponseData {
  type IncludesMedia (line 100) | interface IncludesMedia {
  type ConversationIncludes (line 109) | interface ConversationIncludes {
  type ConversationResponse (line 117) | interface ConversationResponse {
  type CustomMedia (line 128) | interface CustomMedia {
  type LinkWithImage (line 138) | interface LinkWithImage {
  type CustomTweetData (line 150) | interface CustomTweetData {
  type CustomTweets (line 162) | interface CustomTweets {

FILE: misc/twindle-thread/src/constants.js
  constant API (line 3) | const API = {

FILE: misc/twindle-thread/src/helpers/fetch.js
  function getFetch (line 13) | async function getFetch(url, params = {}, options = {}) {
  function postFetch (line 30) | async function postFetch(url, data, options = {}) {

FILE: misc/twindle-thread/types.d.ts
  type IListItemData (line 1) | interface IListItemData {
  type IListItemUser (line 14) | interface IListItemUser {
  type HTMLProps (line 23) | interface HTMLProps<HTMLUListElement> {

FILE: misc/twindle-web/index.js
  function addEmailToGoogleSheet (line 13) | function addEmailToGoogleSheet(event) {
  function validateEmail (line 30) | function validateEmail(email) {

FILE: misc/twindle-web/scripts/testimonials.js
  function goFront (line 53) | async function goFront(d) {
  function goBack (line 69) | async function goBack(d) {

FILE: misc/twindle-web/team_details/team_details.js
  function generateCard (line 3) | function generateCard(info) {
  function pushToDom (line 45) | async function pushToDom() {

FILE: twindle-cli/src/cli.js
  function prepareCli (line 132) | function prepareCli() {
  function getCommandLineObject (line 137) | async function getCommandLineObject() {
  function validateGithubURL (line 266) | async function validateGithubURL(gitHubURL) {

FILE: twindle-cli/src/common.d.ts
  type ProcessEnv (line 2) | interface ProcessEnv {
  type Console (line 25) | interface Console {

FILE: twindle-cli/src/env.js
  constant BEARER_TOKEN (line 12) | const BEARER_TOKEN = "Bearer " + twitterAuthToken;

FILE: twindle-cli/src/fileOpener.js
  function command (line 9) | function command() {

FILE: twindle-cli/src/github/githubparse/app.js
  function getHtml (line 7) | async function getHtml(urlData) {

FILE: twindle-cli/src/github/githubparse/convert.js
  function convertHTML (line 6) | function convertHTML(fetchURL) {

FILE: twindle-cli/src/hacker-news/code.js
  function fetchItem (line 31) | async function fetchItem(url) {
  function getStories (line 48) | async function getStories(storyId, numTopComments, numCommentLevels) {
  function appendComments (line 84) | async function appendComments(parent, numTopComments, iterationLevel, nu...
  function getCommentResponses (line 104) | async function getCommentResponses(parent, numTopComments) {
  function getStoryObject (line 138) | async function getStoryObject(result) {
  function getCommentObject (line 179) | async function getCommentObject(result, iterationLevel) {
  function getUser (line 197) | async function getUser(author) {

FILE: twindle-cli/src/helpers/error.js
  class UserError (line 3) | class UserError extends Error {
    method constructor (line 9) | constructor(name, message) {

FILE: twindle-cli/src/helpers/logger.js
  function devLog (line 1) | function devLog(...args) {

FILE: twindle-cli/src/index.js
  function main (line 20) | async function main() {
  function getDataFromSource (line 69) | async function getDataFromSource(cliObject) {
  function getTweets (line 91) | async function getTweets(cliObject) {
  function getDataFromGithub (line 110) | async function getDataFromGithub({ githubURL }) {
  function getDataFromHackernews (line 114) | async function getDataFromHackernews({ storyId, numTopComments, numComme...
  function getDataFromArticle (line 118) | async function getDataFromArticle({ articleUrl }) {
  function calculateFileName (line 122) | function calculateFileName(cliObject, data) {
  function calculateGenericFileName (line 134) | function calculateGenericFileName(cliObject, component1, component2) {
  function calculateFileNameForTwitter (line 141) | function calculateFileNameForTwitter(cliObject, data) {
  function calculateFileNameForGitHub (line 152) | function calculateFileNameForGitHub(cliObject, data) {
  function calculateFileNameForHackernews (line 167) | function calculateFileNameForHackernews(cliObject, data) {
  function calculateFileNameForArticle (line 182) | function calculateFileNameForArticle(cliObject, data) {
  function writeToMockFile (line 189) | async function writeToMockFile(cliObject, outputFilename, data) {

FILE: twindle-cli/src/readability/index.js
  constant JSDOM (line 3) | const JSDOM = require("jsdom").JSDOM;
  function readURL (line 6) | async function readURL(testUrl) {
  function getJSDOM (line 22) | async function getJSDOM(url) {
  function getParsedArticle (line 27) | function getParsedArticle(windowDocument) {
  function getArticleJSON (line 32) | function getArticleJSON(article, url, windowDocument) {
  function getURLDomain (line 46) | function getURLDomain(url) {

FILE: twindle-cli/src/renderer/epub/epub.js
  function generateEpub (line 18) | function generateEpub(directory) {

FILE: twindle-cli/src/renderer/epub/index.js
  function generateEpub (line 23) | async function generateEpub(srcData, src, outputPath) {

FILE: twindle-cli/src/renderer/epub/render-template.js
  function renderTemplate (line 14) | async function renderTemplate(data, src) {
  function renderTwitterTemplate (line 21) | async function renderTwitterTemplate(data) {
  function renderGithubTemplate (line 64) | async function renderGithubTemplate(data) {
  function renderHackernewsTemplate (line 108) | async function renderHackernewsTemplate(data) {
  function renderArticleTemplate (line 168) | async function renderArticleTemplate(data) {

FILE: twindle-cli/src/renderer/mobi/index.js
  function generateMobi (line 12) | async function generateMobi(srcData, src, outputPath) {

FILE: twindle-cli/src/renderer/pdf/create-pdf.js
  function footerMarkup (line 4) | function footerMarkup() {
  function createPdf (line 21) | async function createPdf(outputPath, htmlContent) {

FILE: twindle-cli/src/renderer/pdf/index.js
  function generatePDF (line 6) | async function generatePDF(srcData, src, outputPath) {

FILE: twindle-cli/src/renderer/pdf/render-template.js
  function renderTemplate (line 17) | async function renderTemplate(data, src) {
  function renderTwitterTemplate (line 24) | async function renderTwitterTemplate(data) {
  function renderGithubTemplate (line 48) | async function renderGithubTemplate(data) {
  function renderHackernewsTemplate (line 72) | async function renderHackernewsTemplate(data) {
  function renderArticleTemplate (line 102) | async function renderArticleTemplate(data) {

FILE: twindle-cli/src/setup/init.js
  function onErr (line 77) | function onErr(err) {

FILE: twindle-cli/src/twitter/api/constants.js
  constant TWEET_FIELDS (line 1) | const TWEET_FIELDS =
  constant EXPANSIONS (line 5) | const EXPANSIONS = "&expansions=author_id,attachments.media_keys";
  constant USER_FIELDS (line 6) | const USER_FIELDS =
  constant MEDIA_FIELDS (line 8) | const MEDIA_FIELDS =
  constant PLACE_FIELDS (line 10) | const PLACE_FIELDS = "&place.fields=contained_within,country,country_cod...
  constant POLL_FIELDS (line 11) | const POLL_FIELDS = "&poll.fields=duration_minutes,end_datetime,voting_s...
  constant MAX_RESULTS (line 12) | const MAX_RESULTS = "&max_results=100";

FILE: twindle-cli/src/twitter/api/twitter-endpoints/search.js
  constant BASE_ENDPOINT (line 5) | const BASE_ENDPOINT =

FILE: twindle-cli/src/twitter/api/twitter-endpoints/tweets.js
  constant BASE_ENDPOINT (line 5) | const BASE_ENDPOINT = "https://api.twitter.com/2/tweets?ids=";

FILE: twindle-cli/src/twitter/api/twitter-endpoints/user_timeline.js
  constant BASE_ENDPOINT (line 4) | const BASE_ENDPOINT =

FILE: twindle-cli/src/twitter/error/api.js
  class NetworkRequestError (line 3) | class NetworkRequestError extends TwitterError {
    method constructor (line 4) | constructor() {
  class TokenNotProvidedError (line 9) | class TokenNotProvidedError extends TwitterError {
    method constructor (line 10) | constructor() {
  class InvalidTokenError (line 15) | class InvalidTokenError extends TwitterError {
    method constructor (line 16) | constructor() {
  class BadTwitterRequestError (line 24) | class BadTwitterRequestError extends TwitterError {
    method constructor (line 25) | constructor() {
  class TwitterServiceError (line 33) | class TwitterServiceError extends TwitterError {
    method constructor (line 34) | constructor() {
  class TweetIDNotProvidedError (line 42) | class TweetIDNotProvidedError extends TwitterError {
    method constructor (line 43) | constructor() {
  class TweetDoesNotExist (line 48) | class TweetDoesNotExist extends TwitterError {
    method constructor (line 49) | constructor() {
  class UserScreenNameInvalid (line 54) | class UserScreenNameInvalid extends TwitterError {
    method constructor (line 55) | constructor() {

FILE: twindle-cli/src/twitter/error/base.js
  class TwitterError (line 3) | class TwitterError extends UserError {
    method constructor (line 4) | constructor(name, message) {

FILE: twindle-cli/src/twitter/error/validation.js
  class TweetDeletedError (line 3) | class TweetDeletedError extends TwitterError {
    method constructor (line 4) | constructor() {
  class TweetOlderThan7DaysError (line 9) | class TweetOlderThan7DaysError extends TwitterError {
    method constructor (line 10) | constructor() {
  class TweetNotFirstOfThreadError (line 15) | class TweetNotFirstOfThreadError extends TwitterError {
    method constructor (line 16) | constructor() {

FILE: twindle-cli/src/twitter/transformations/helpers.js
  function fixLineBreaks (line 65) | function fixLineBreaks(tweet) {

FILE: twindle-cli/src/twitter/transformations/rich-rendering.js
  function renderMedia (line 17) | function renderMedia(tweetObj) {
  function renderOutsiderLinks (line 85) | async function renderOutsiderLinks(tweetObj, embedded) {
  function renderMentionsHashtags (line 185) | function renderMentionsHashtags({ text = "", mentions = [], hashtags = [...
  function fixUserDescription (line 219) | function fixUserDescription(user) {
  function _renderRichTweets (line 256) | async function _renderRichTweets(tweetObj, embedded = false) {
  function sanitizeForHandlebars (line 274) | function sanitizeForHandlebars(tweetObj) {
  function _renderEmbeddedTweets (line 295) | async function _renderEmbeddedTweets(tweetObj, token) {
  function renderRichTweets (line 356) | async function renderRichTweets(tweetObj, token, isUserTimeline) {

FILE: twindle-cli/src/twitter/transformations/search-endpoint.js
  function processSearchResponse (line 11) | async function processSearchResponse(responseJSON, token) {
  function processReplies (line 46) | async function processReplies(responseJSON, token) {
  function updateReplies (line 76) | async function updateReplies(responseJSON, replies, finalTweetsData, tok...

FILE: twindle-cli/src/twitter/transformations/tweet-endpoint.js
  function processTweetLookup (line 13) | async function processTweetLookup(responseJSON, token) {

FILE: twindle-cli/src/twitter/transformations/tweets-array-endpoint.js
  function processTweetsArray (line 10) | async function processTweetsArray(responseJSON, token) {
  function processReplies (line 70) | async function processReplies(responseJSON, token) {
  function updateReplies (line 90) | async function updateReplies(responseJSON, replies, finalTweetsData, tok...

FILE: twindle-cli/src/twitter/transformations/user-timeline-endpoint.js
  function processUserTweets (line 12) | async function processUserTweets(screenName, responseJSON, token) {

FILE: twindle-cli/src/twitter/twitter.js
  function counter (line 24) | function counter({ initial, final }) {
  function getTweetsFromUser (line 77) | async function getTweetsFromUser(screenName, token) {

FILE: twindle-cli/src/twitter/validations/tweet-endpoint.js
  function processResponse (line 39) | function processResponse(response) {

FILE: twindle-cli/src/types/twitter.ts
  type Mention (line 1) | interface Mention {
  type Hashtag (line 7) | interface Hashtag {
  type EntityUrl (line 13) | interface EntityUrl {
  type Attachments (line 32) | interface Attachments {
  type User (line 37) | interface User {
  type ConversationResponseData (line 66) | interface ConversationResponseData {
  type IncludesMedia (line 101) | interface IncludesMedia {
  type ConversationIncludes (line 110) | interface ConversationIncludes {
  type ConversationResponse (line 118) | interface ConversationResponse {
  type CustomMedia (line 129) | type CustomMedia = {
  type LinkWithImage (line 139) | interface LinkWithImage {
  type Answer (line 151) | interface Answer extends Pick<CustomTweetData, "id" | "tweet"> {}
  type Reply (line 153) | interface Reply extends Pick<CustomTweetData, "id" | "tweet"> {
  type CustomTweetData (line 159) | interface CustomTweetData {
  type CommonData (line 173) | interface CommonData {
  type CustomTweets (line 180) | interface CustomTweets {

FILE: twindle-cli/src/utils/env.js
  function getBearerToken (line 11) | function getBearerToken() {
  function getTwindleLibraryPath (line 18) | function getTwindleLibraryPath() {
  function getEmailConfig (line 24) | function getEmailConfig() {

FILE: twindle-cli/src/utils/helpers.js
  function isValidEmail (line 11) | function isValidEmail(email) {

FILE: twindle-cli/src/utils/image.js
  function encodeImage (line 8) | async function encodeImage(url) {

FILE: twindle-cli/src/utils/library.js
  function createLibraryIfNotExists (line 18) | function createLibraryIfNotExists() {

FILE: twindle-cli/src/utils/send-email.js
  function sendMail (line 16) | async function sendMail({ subject, emailTo, attachments }) {

FILE: twindle-cli/src/utils/send-to-kindle.js
  function sendToKindle (line 6) | async function sendToKindle(kindleEmail, filePath) {
Condensed preview — 416 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (823K chars).
[
  {
    "path": ".all-contributorsrc",
    "chars": 2767,
    "preview": "{\n  \"files\": [\n    \"README.md\"\n  ],\n  \"imageSize\": 100,\n  \"commit\": false,\n  \"contributors\": [\n    {\n      \"login\": \"pro"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 125,
    "preview": "## Description\n\n\n## Attach Screenshot\n\n\n> Note 2 code reviewer approval needed. Approach in twitter group & discord chan"
  },
  {
    "path": ".github/TEMP_ISSUE_TEMPLATE.md",
    "chars": 696,
    "preview": "# Temporarily disabled\n\n\n\n<!--\nIF SUFFICIENT INFORMATION IS NOT PROVIDED VIA THE FOLLOWING TEMPLATE THE ISSUE MIGHT BE C"
  },
  {
    "path": ".github/workflows/conflict.yml",
    "chars": 691,
    "preview": "name: Add label on merge conflict\non:\n  pull_request_target:\n    branches: [ main ]\njobs:\n  add-label:\n    runs-on: ubun"
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 450,
    "preview": "name: Mark stale issues and pull requests\n\non:\n  schedule:\n  - cron: \"0 0 * * *\"\n\njobs:\n  stale:\n\n    runs-on: ubuntu-la"
  },
  {
    "path": ".github/workflows/tests.yml",
    "chars": 764,
    "preview": "name: Node.js Tests\n\non:\n  push:\n    branches: [ main ]\n  pull_request:\n    branches: [ main ]\n\njobs:\n  test:\n    runs-o"
  },
  {
    "path": ".gitignore",
    "chars": 1782,
    "preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n\n# Diagnostic reports (https://nodejs."
  },
  {
    "path": "CNAME",
    "chars": 14,
    "preview": "www.twindle.co"
  },
  {
    "path": "LICENSE",
    "chars": 1067,
    "preview": "MIT License\n\nCopyright (c) 2020 twindle-co\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "README.md",
    "chars": 6015,
    "preview": "# [Twindle](https://twindle-co.github.io/twindle/.) 📖\n<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this s"
  },
  {
    "path": "misc/CONTRIBUTING.md",
    "chars": 972,
    "preview": "# How to contribute\n\nYou can contribute by first forking the repository and then,\n- Creating Pull Requests\n- Creating Is"
  },
  {
    "path": "misc/docs/CHEATSHEET.md",
    "chars": 137,
    "preview": "\n![Markdown cheatsheet](./images/markdown.png)\n\n![git cheatsheet](./images/git.png)\n\n\n![Terminal commands cheatsheet](./"
  },
  {
    "path": "misc/docs/CODE-REVIEW-CHECKLIST.md",
    "chars": 1270,
    "preview": "# List down things to look for in a PR \n\n### Code Review Checklist\n\n- [x] For your first PR, please use all lower case f"
  },
  {
    "path": "misc/docs/FAQ.md",
    "chars": 3152,
    "preview": "# FAQs\n\n1. [General](#general-)\n2. [Git](#Git-)\n3. [Github](#github-octocat)\n4. [Google Meet](#google-meet-)\n5. [Logo](#"
  },
  {
    "path": "misc/docs/NAMING-CONVENTIONS.md",
    "chars": 2893,
    "preview": "# File Name Conventions\n\n## Possible characters\n\n### Use dashes as delimiters\n\n- You should use dashes (-) as delimiters"
  },
  {
    "path": "misc/docs/ONBOARDING.md",
    "chars": 3485,
    "preview": "# I joined! What to do next?\n\nWelcome to the twindle team 🥳 , this is a beginner friendly project, please follow these s"
  },
  {
    "path": "misc/docs/README.md",
    "chars": 353,
    "preview": "# Documentation\n\n## Table of Contents\n\n- [FAQs](/docs/FAQ.md)\n- [Naming Conventions](/docs/NAMING-CONVENTIONS.md)\n- [Res"
  },
  {
    "path": "misc/docs/RESOURCES.md",
    "chars": 2502,
    "preview": "# Resources\n\nThis page contains the list of resources that can help you get started.\n\nYou can also contribute by providi"
  },
  {
    "path": "misc/docs/TEAM.md",
    "chars": 40539,
    "preview": "## Beginner\n\n| Image                                                                      | Name                        "
  },
  {
    "path": "misc/docs/TWINDLE.md",
    "chars": 2237,
    "preview": "# Why should twitter users consider Twindle to read through Twitter thread?\n\nBefore we dive into what Twindle aims to so"
  },
  {
    "path": "misc/docs/TWITTER.md",
    "chars": 123,
    "preview": "# 18 OCT 2029\n\nHow to make a PR directly from vscode\n\n@Pranavgoel_29 #twindle\n\nhttps://www.youtube.com/watch?v=ZQqfZt1RI"
  },
  {
    "path": "misc/docs/articles/Process-for-new-contributors.md",
    "chars": 5471,
    "preview": "Hi everyone :wave:, usually when people get connected to an open-source project(which is yes, pretty much exciting :open"
  },
  {
    "path": "misc/docs/articles/README.md",
    "chars": 132,
    "preview": "# Articles\n\nCreate an article here and add it as a link on the main project readme file. This will show up on the websit"
  },
  {
    "path": "misc/docs/articles/creating-first-pull-request.md",
    "chars": 1376,
    "preview": "I hope the following screenshots will help with your first pull request.\n\nFirstly create your account on github and goto"
  },
  {
    "path": "misc/docs/articles/design-guide-for-good-logo.md",
    "chars": 2618,
    "preview": "There are some teams and logos you see, no matter where you are in the world, and you know exactly who they are and what"
  },
  {
    "path": "misc/docs/articles/git -github-related.md",
    "chars": 6109,
    "preview": "Hello friends :wave:  :smiley: , when we talk about **git** and **github** then, there are lot of confusion :confused: e"
  },
  {
    "path": "misc/docs/articles/handlebar-explained.md",
    "chars": 4100,
    "preview": "### **Why do we need Handlebars?**\n\nFor converting twitter threads to PDFs, we initially need to compose HTML comprising"
  },
  {
    "path": "misc/docs/articles/javascript-code.md",
    "chars": 6347,
    "preview": "Hello everyone :wave: here, I am writing some questions and try to give the answer( if you think you have better answer "
  },
  {
    "path": "misc/docs/articles/pr-clean-commits.md",
    "chars": 1191,
    "preview": "Take a look at the image below\n![A PR](./images/fork-ahead-upstream-header-image.png)\n\nIt's a PR I opened recently. I ma"
  },
  {
    "path": "misc/docs/articles/puppeteer-explained.md",
    "chars": 4874,
    "preview": "### **What is Puppeteer?**\n\n<img src=\"https://user-images.githubusercontent.com/5336488/96694886-a2195480-13a6-11eb-9311"
  },
  {
    "path": "misc/docs/articles/setup-prettier-vscode.md",
    "chars": 6904,
    "preview": "# Setting up auto-formatting in VSCode in 5 minutes\n\n> Originally published on [puruvj.dev](https://puruvj.dev/blog/setu"
  },
  {
    "path": "misc/docs/articles/solving-forked-commit-ahead.md",
    "chars": 469,
    "preview": "## Scenario\n\n> - You fetch the upstream/main to your local repo\n> - You pull the upstream/main to your local repo\n> - Yo"
  },
  {
    "path": "misc/docs/articles/sync-to-main-repo-using-git-bash.md",
    "chars": 743,
    "preview": "---\n\nI assume you already forked the main repo and clone into your local\n\nInitially it has a default remote called origi"
  },
  {
    "path": "misc/docs/articles/sync-to-main-repo-using-pull-request.md",
    "chars": 2251,
    "preview": "In this post, you will learn how to use Github pull request to synchronize your forked repository with the parent reposi"
  },
  {
    "path": "misc/docs/articles/sync-to-main-repo.md",
    "chars": 1522,
    "preview": "Here, I am assuming that you have already connected your **GitHub** account with the **Visual Studio Code**.\n\n    \n**Ste"
  },
  {
    "path": "misc/docs/images/README.md",
    "chars": 44,
    "preview": "store document related image in this folder\n"
  },
  {
    "path": "misc/firstpr/abdu_masoudi.md",
    "chars": 69,
    "preview": "## Hello :)\r\nMy name is *Abdu* and I'm a self-taught Web Developer.\r\n"
  },
  {
    "path": "misc/firstpr/abhilash_s_s.md",
    "chars": 152,
    "preview": "### Hey 👋🏽, \n##### I'm [Abhilash S S](https://github.com/itsmeAB) from Kerala, India. I am looking forward with this pro"
  },
  {
    "path": "misc/firstpr/ad3rinto.md",
    "chars": 108,
    "preview": "******************************ad3rinto****************\nBased in manchester , UK\ntwitter/ad3rinto\nCodenewbie\n"
  },
  {
    "path": "misc/firstpr/adewale.md",
    "chars": 305,
    "preview": "I am Adewale. I am a beginner with basic knowledge of HTML, CSS and Javascript. \n\nI don't stop acquiring new knowledge. "
  },
  {
    "path": "misc/firstpr/aditya.md",
    "chars": 209,
    "preview": "🤓 Aditya Satpute From Nashik, Maharashtra, India. I'm having 2+ years of experience in Web Dev. And Trying to learn java"
  },
  {
    "path": "misc/firstpr/aditya20233.md",
    "chars": 59,
    "preview": "Aditya Lodhi-Python Begginer\n\nsecond PR,changes from github"
  },
  {
    "path": "misc/firstpr/aditya786.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "misc/firstpr/akshay.md",
    "chars": 2002,
    "preview": "# Hi! I'm [Akshay Sharma](https://github.com/Akshay2996) 👋\n\n- ☯ I'm a **Developer / Thinker / Creator / Learner**\n- 👨‍💻 "
  },
  {
    "path": "misc/firstpr/alejandra_pinto.md",
    "chars": 291,
    "preview": "### Hi there 👋\n\nMy name is Alejandra, I´m Developer in process...\n----\n\n- 🔭 I’m currently working on Projects startup\n- "
  },
  {
    "path": "misc/firstpr/alexis.md",
    "chars": 170,
    "preview": "I'm Alexis Rivas from México, a just graduated Computer Systems Engineer and a newbie in the open source development, I "
  },
  {
    "path": "misc/firstpr/ali.md",
    "chars": 85,
    "preview": "Ali Ka from Sénégal. CS student, comfortable with HTML/CSS bootstrap and javascript.\n"
  },
  {
    "path": "misc/firstpr/andrei.md",
    "chars": 62,
    "preview": "Andrei Dan\nFrom Romania\nbeginner to html, css and javvascript\n"
  },
  {
    "path": "misc/firstpr/anujshukla.md",
    "chars": 240,
    "preview": "Hey this is Anuj  from Kushinagar India, I am currently an undergrad at VIT Vellore, India. I love the frontend developm"
  },
  {
    "path": "misc/firstpr/aparna.md",
    "chars": 186,
    "preview": "Aparna a tech woman on break living in Bangalore with five years of experience in Java and Java EE. Trying to get into E"
  },
  {
    "path": "misc/firstpr/aravind.md",
    "chars": 196,
    "preview": "My name is Aravind. I'm a product engineer living in US with 2 years of experience in software testing and project manag"
  },
  {
    "path": "misc/firstpr/arthurbuhl.md",
    "chars": 147,
    "preview": "### Hi there 👋\n\nI am Arthur Buhl. Web developer with basic knowledge of HTML, CSS and JS.\n\n### Learning PR\n\n- This is my"
  },
  {
    "path": "misc/firstpr/ashish.md",
    "chars": 109,
    "preview": "Hello I'm ashish,\n\nA former QA engineer, now a front-end developer\nLooking forward to contribute on twindle.\n"
  },
  {
    "path": "misc/firstpr/baijanath.md",
    "chars": 215,
    "preview": "Hey, I am Baijanath Tharu from Nepal. I have been learning MERN stack for few months. I am comfortable with HTML, CSS, J"
  },
  {
    "path": "misc/firstpr/bill.md",
    "chars": 277,
    "preview": "# Hello 👋\n\nI am Bill from Indonesia. Aspired to become a front-end web developer.\n\nI learned web programming for the fir"
  },
  {
    "path": "misc/firstpr/blessing.md",
    "chars": 72,
    "preview": "Olaleye Blessing, student. Little bit comfortable with HTML, CSS and JS\n"
  },
  {
    "path": "misc/firstpr/can.md",
    "chars": 57,
    "preview": "Can Koçman,\nFrom Turkey,\nStudent and Developer.\nlocal PR\n"
  },
  {
    "path": "misc/firstpr/chimdie.md",
    "chars": 36,
    "preview": "_That really felt good once again._\n"
  },
  {
    "path": "misc/firstpr/codekumar.md",
    "chars": 97,
    "preview": "Ashish Kamble, ( kambleaa007.github.io ) Full Stack Developer - 3+ Years of experience in coding\n"
  },
  {
    "path": "misc/firstpr/daniel.md",
    "chars": 63,
    "preview": "Hello! I'm Daniel, currently a CS student and a web developer.\n"
  },
  {
    "path": "misc/firstpr/davabalan.md",
    "chars": 11,
    "preview": "Davabalan \n"
  },
  {
    "path": "misc/firstpr/deepak.md",
    "chars": 63,
    "preview": "Deepak - From Barh, Patna, language : C > HTML > JS : Beginner\n"
  },
  {
    "path": "misc/firstpr/deepak1_try2.md",
    "chars": 105,
    "preview": "Deepak- i have no experience in coding except C at college level and HTML & JS as hobby ( Self taught). \n"
  },
  {
    "path": "misc/firstpr/edori.md",
    "chars": 120,
    "preview": "Hello, I am Edori from Nigeria. I started learning how to use HTML, CSS and Javascript this year.\nThis is the second PR\n"
  },
  {
    "path": "misc/firstpr/edwin.md",
    "chars": 166,
    "preview": "My name is Edwin Mancipe. \nI am from Colombia. \nI am 43 years old. \nI have some experience with javascript and python.\nI"
  },
  {
    "path": "misc/firstpr/eyram.md",
    "chars": 87,
    "preview": "hi, Eyram is name from Ghana.i started learning web develop some months ago.\nSecond pr."
  },
  {
    "path": "misc/firstpr/fabio.md",
    "chars": 314,
    "preview": "#### Fabio Duarte\nI'm from Colombia.\nI'm a beginner with some experience in HTML, CSS and JavaScript. Lately I've been u"
  },
  {
    "path": "misc/firstpr/franklinulrich.md",
    "chars": 142,
    "preview": "Hello I'm [Franklin](https://twitter.com/frankiefab100), a multidisciplinary Designer and UI Developer from a Biological"
  },
  {
    "path": "misc/firstpr/fusen.md",
    "chars": 226,
    "preview": "I am Fusen Ye from China.\nA beginner of HTML,CSS and JavaScript.\nI want to contribute to the project.\nThis my first pr.\n"
  },
  {
    "path": "misc/firstpr/habeeb.md",
    "chars": 87,
    "preview": "I am Alasi. I have basic knowledge of HTML and CSS but currently learning Javascript. \n"
  },
  {
    "path": "misc/firstpr/harsha.md",
    "chars": 1170,
    "preview": "## Hello World! \n<img src=\"https://raw.githubusercontent.com/iampavangandhi/iampavangandhi/master/gifs/Hi.gif\" width=\"30"
  },
  {
    "path": "misc/firstpr/ibrahim.md",
    "chars": 32,
    "preview": "Hi, this is ibrahim from jordan\n"
  },
  {
    "path": "misc/firstpr/jahid.md",
    "chars": 111,
    "preview": "# I am Jahid Hasan, from Bangladesh.\n# I am an independent learner and coder without no prior work experience.\n"
  },
  {
    "path": "misc/firstpr/jaki.md",
    "chars": 112,
    "preview": "Mohamad Arif Mujaki as Jaki From Jakarta, Indonesia with less 1 year of development experience. I still newbie.\n"
  },
  {
    "path": "misc/firstpr/jesulayomi.md",
    "chars": 64,
    "preview": "Adetola Jesulayomi, Law Student - a bit of experience in coding\n"
  },
  {
    "path": "misc/firstpr/jilva.md",
    "chars": 167,
    "preview": "Hi everyone, I am Jilva Sheth from India. I am a Java developer and interested to learn more about HTML, CSS and Javascr"
  },
  {
    "path": "misc/firstpr/joel_vinay_kumar.md",
    "chars": 115,
    "preview": "I'm Joel Vinay Kumar, a software engineer in Auzmor Inc.\n\nFind all about me in my [website](http://joel.swecha.io)\n"
  },
  {
    "path": "misc/firstpr/karan.md",
    "chars": 98,
    "preview": "Hello I am Karan Oza from Pune, India. I have 1 year experience in Angular Front-End development.\n"
  },
  {
    "path": "misc/firstpr/karan_khosla.md",
    "chars": 88,
    "preview": "Karan Khosla\nI'm from India\nI've over 9 years of experience but not in front end domain\n"
  },
  {
    "path": "misc/firstpr/kenny.md",
    "chars": 24,
    "preview": "Hi everyone, Kenny here\n"
  },
  {
    "path": "misc/firstpr/kingsley_victor.md",
    "chars": 339,
    "preview": "[Kingsley Victor](https://github.com/kingsley-einstein)\n\nFull-stack software engineer proficient in Java, Javascript and"
  },
  {
    "path": "misc/firstpr/kiran_don.md",
    "chars": 332,
    "preview": "## Hello! This is [Usha Kiran](https://twitter.com/ushakiran_m) from Andhra Pradesh, India.\n### I am a second year compu"
  },
  {
    "path": "misc/firstpr/krishnadevz.md",
    "chars": 2199,
    "preview": "<h1 align=\"center\">Hello World👋</h1>\n<p align=\"center\">\n  <a href=\"https://krishnadevz.github.io/\">Website</a> •\n  <a hr"
  },
  {
    "path": "misc/firstpr/krypton.md",
    "chars": 564,
    "preview": "\n### Hi there 👋\n\n##### I'm Kryptöñ,\nAn engineering student with great passion for UI/UX designing, i love to create beau"
  },
  {
    "path": "misc/firstpr/lara_noomene.md",
    "chars": 118,
    "preview": "I am a junior developer student, I am following some programming courses and wish to learn more through this project.\n"
  },
  {
    "path": "misc/firstpr/layomi.md",
    "chars": 65,
    "preview": "Adetola Jesulayomi, Law Student -  a bit of experience in coding\n"
  },
  {
    "path": "misc/firstpr/lilfatfrank.md",
    "chars": 69,
    "preview": "Karan Parsnani\nExperience with React and JavaScript.\n\nMumbai, India.\n"
  },
  {
    "path": "misc/firstpr/liviza.md",
    "chars": 55,
    "preview": "am luli, a newBie web-developer, this is my second PR.\n"
  },
  {
    "path": "misc/firstpr/lorennale.md",
    "chars": 1296,
    "preview": "### Hello World!\n\nMy name is Lorenna Leon, I'm a Software Developer in process but I have a lot of desire to learn every"
  },
  {
    "path": "misc/firstpr/lukmanokunade.md",
    "chars": 115,
    "preview": "Lukman Okunade, from Nigeria. I am proficient using HTML, CSS and JavaScript. I can work with NodeJs and React too\n"
  },
  {
    "path": "misc/firstpr/luli.md",
    "chars": 64,
    "preview": "#hi! am luli , a beginner with some basics in html5,css3 and js\n"
  },
  {
    "path": "misc/firstpr/manohar.md",
    "chars": 71,
    "preview": "**Manohar, new developer, looking forward to learn from this project**\n"
  },
  {
    "path": "misc/firstpr/manuel_alejandro.md",
    "chars": 175,
    "preview": "I'm Manuel , from Cuba. I have knowledge in HTML,CSS, JS and a little bit of React. This is my first experience in sourc"
  },
  {
    "path": "misc/firstpr/marcus.md",
    "chars": 119,
    "preview": "Marcus Ojetunde from Lagos, Nigeria with less than 1 year experience in web development\nI use React as my Js framework\n"
  },
  {
    "path": "misc/firstpr/maria_rivera.md",
    "chars": 83,
    "preview": "Hello, My name is Maria and I'm a Software Engineer student at 42 Silicon Valley. \n"
  },
  {
    "path": "misc/firstpr/mbui.md",
    "chars": 37,
    "preview": "**Githaka Mbui - Software engineer**\n"
  },
  {
    "path": "misc/firstpr/melissa_huerta.md",
    "chars": 1100,
    "preview": "### Hello World!\n\nMy name is Melissa H, I'm a Game/Software Developer in process...  \n\nPreviously worked in the IT Infra"
  },
  {
    "path": "misc/firstpr/michael.md",
    "chars": 51,
    "preview": "My name is Michael from Nigeria and I love coding.\n"
  },
  {
    "path": "misc/firstpr/mumbi.md",
    "chars": 457,
    "preview": "**Basic Intro**\n\nName : Regina Mumbi Gachomba\n\nI am a kenyan student currently studying in Turkey for my undergrad degre"
  },
  {
    "path": "misc/firstpr/nahuel.md",
    "chars": 408,
    "preview": "Hi everyone! I am Nahuel from Argentina, I am 24 years old. \nI am a beginner and this is my first time working in a proj"
  },
  {
    "path": "misc/firstpr/nailah.md",
    "chars": 229,
    "preview": "Nneyen Umana from Nigeria, With a few months of developing experience. \nThis is my attempt at a PR... I messed up the fi"
  },
  {
    "path": "misc/firstpr/naveen.md",
    "chars": 82,
    "preview": "I am Naveen, an engineering student. Begineer in html , CSS, javascript and React."
  },
  {
    "path": "misc/firstpr/neaz_mahmood.md",
    "chars": 123,
    "preview": "I couldnot my 1st pr file named neaz.md.\nMaybe It was not marged yet. So I made this file. I am using git bash for this "
  },
  {
    "path": "misc/firstpr/nishank.md",
    "chars": 182,
    "preview": "Nishank , Beginner , Basics of Python, C, C++, I can do basic HTML, CSS by searching and getting things done by internet"
  },
  {
    "path": "misc/firstpr/nitin_kadam.md",
    "chars": 167,
    "preview": "### Hi there 👋\n\nNitin Kadam\nFrom Pune, India. \n5+ years of experience in the web development.\nModerate level in the Fron"
  },
  {
    "path": "misc/firstpr/nivetha.md",
    "chars": 359,
    "preview": "Hi, this is Nivetha from India.\n\n**Things about me**\n\n- I am a Computer Science graduate and looking for a job opportuni"
  },
  {
    "path": "misc/firstpr/omolo.md",
    "chars": 108,
    "preview": "Passionate about technology and currently learning to be a full-stack developer. Am based in Nairobi, Kenya\n"
  },
  {
    "path": "misc/firstpr/paniagua.md",
    "chars": 178,
    "preview": "I'm from Dominican Rep. I have knowledge in HTML,CSS, JS and a little bit of React. I'm kind of new here in git and this"
  },
  {
    "path": "misc/firstpr/pavan.md",
    "chars": 1201,
    "preview": "# Hi! I'm Pavan Kallati \n\n- I'm a **Developer / Problem Solver / learner**\n- Trying to be a better Full Stack Developer "
  },
  {
    "path": "misc/firstpr/pr_m.md",
    "chars": 184,
    "preview": "#Prathap\n\nCS Student. Now a working professional for a big bank.\n\nI never got a chance to work on open source or UI dev "
  },
  {
    "path": "misc/firstpr/prajwal.md",
    "chars": 90,
    "preview": "Prajwal Pradhan From Nepal,  2 years of developement experience. Specialise in React.js. \n"
  },
  {
    "path": "misc/firstpr/pranav.md",
    "chars": 108,
    "preview": "## Pranav Goel\nFrom Uttar Pradesh, India\n\n### Skills\nHTML, CSS, C++, C\n- I am just starting with javascript."
  },
  {
    "path": "misc/firstpr/prasanna.md",
    "chars": 80,
    "preview": "Prasanna from Tamil Nadu , India with 5 years of development experience in .Net\n"
  },
  {
    "path": "misc/firstpr/praveen.md",
    "chars": 75,
    "preview": "Praveen from TamilNadu Having 3 years of experience as a Backend developer\n"
  },
  {
    "path": "misc/firstpr/pravin.md",
    "chars": 62,
    "preview": "Pravinraj - Sofware Engineer focused on frontend technologies\n"
  },
  {
    "path": "misc/firstpr/predrag_stamenkovic.md",
    "chars": 331,
    "preview": "Predrag Stamenkovic,a\nHTML and CSS beginner\n\nMy name is Predrag Stamenkovic from Belgrade - Serbia.\nI work as Purchasing"
  },
  {
    "path": "misc/firstpr/prem.md",
    "chars": 108,
    "preview": "Hi all, This is Prem (MrVoicer) from India. I create WordPress Website and Speed optimize them to load fast\n"
  },
  {
    "path": "misc/firstpr/proful.md",
    "chars": 77,
    "preview": "Proful Sadangi\nFrom India, Living in Sydney\n15 yr of developement experience\n"
  },
  {
    "path": "misc/firstpr/puru.md",
    "chars": 198,
    "preview": "Puru Vijay from Jaipur, Rajasthan, India. 5 years of experience.\n\nHas worked in HTML, CSS, JS, StencilJS, React, Svelte,"
  },
  {
    "path": "misc/firstpr/rafael.md",
    "chars": 185,
    "preview": "I'm Rafael Rodrigues from Brazil. I'm a beginner in the programming world. I started to learn HTML+CSS+JavaScript about "
  },
  {
    "path": "misc/firstpr/rajesh_prajapati.md",
    "chars": 497,
    "preview": "### Hi there 👋\n\n- 🔭 I’m currently working on ...#React & #Flutter\n- 🌱 I’m currently learning ...Javascript & Dart\n- 👯 I’"
  },
  {
    "path": "misc/firstpr/rakesh.md",
    "chars": 243,
    "preview": "### Hey Internet,\n\n<br/>\n\nI'm [Rakesh!](https://github.com/Rakesh-4) Software Developer have 3+ years of experience in C"
  },
  {
    "path": "misc/firstpr/rohitsawai.md",
    "chars": 205,
    "preview": "Hello Everyone, This is Rohit Sawai, from Beed, Maharashtra. I'm Software Engineer and like to develop such products whi"
  },
  {
    "path": "misc/firstpr/sachin.md",
    "chars": 81,
    "preview": "Sachin from India, 6 months of experience in JavaScript, Html, Css, Node, React.\n"
  },
  {
    "path": "misc/firstpr/samriddhi.md",
    "chars": 159,
    "preview": "## Hi!\nI'm Samriddhi, a 3rd year CSE undergrad 👨‍🎓\n\nI am currently learning MERN stack 💻📚\n\nGlad to be here ✨\n\nFind me on"
  },
  {
    "path": "misc/firstpr/samueladeniyi.md",
    "chars": 101,
    "preview": "hello, i am samuel adeniyi from nigeria, i am comfortable with HTML, CSS, Javascript, React amd Node"
  },
  {
    "path": "misc/firstpr/sarvesh.md",
    "chars": 81,
    "preview": "Sarvesh Kadam from Mumbai,India. QA Engineer currently learning Web Developement\n"
  },
  {
    "path": "misc/firstpr/sasmita.md",
    "chars": 112,
    "preview": "\nI am web Designer love to create web page in figma and photoshop and also ready to learn .I am beginner stage.\n"
  },
  {
    "path": "misc/firstpr/satyaki.md",
    "chars": 100,
    "preview": "# Hi, I'm Satyaki !\nI am a MERN stack developer.\n\nFind me on [Github](https://github.com/satyaki07)\n"
  },
  {
    "path": "misc/firstpr/saurabh_srivastava.md",
    "chars": 726,
    "preview": "# **Namaste to all of you** <img src=\"https://raw.githubusercontent.com/MartinHeinz/MartinHeinz/master/wave.gif\" width=\""
  },
  {
    "path": "misc/firstpr/scott.md",
    "chars": 160,
    "preview": "I am Scott  a frontend developer from johannesburg ,south africa. \n i am self taught with some knowledge of css,html, ja"
  },
  {
    "path": "misc/firstpr/sheetal.md",
    "chars": 226,
    "preview": "### Hey there! :)\r#### I am Sheetal Pandey, an engineering student from India.\rI basically work with Python but I am als"
  },
  {
    "path": "misc/firstpr/shekharranjan.md",
    "chars": 157,
    "preview": "Shekhar Ranjan - Learning JavaScript and a beginner in GitHub. I have basic knowledge of Java and SQL.This is 2nd PR and"
  },
  {
    "path": "misc/firstpr/simrin_joshi.md",
    "chars": 200,
    "preview": "I am a passionate professional focussed on full stack developement. I have 1.5 years of experience in Angular, HTML, CSS"
  },
  {
    "path": "misc/firstpr/sippeybro.md",
    "chars": 16,
    "preview": "Hi im sippey bro"
  },
  {
    "path": "misc/firstpr/sravan.md",
    "chars": 106,
    "preview": "sravan-html,css andjs enthusiast.Open to learn new things.\nThis is my second pr from my local machine....\n"
  },
  {
    "path": "misc/firstpr/sunny.md",
    "chars": 243,
    "preview": "### hey there\n**second pr**\n\n\ni am sunny, from India and a Engineering student..\nand am very much comfortable in HTML, C"
  },
  {
    "path": "misc/firstpr/suraj.md",
    "chars": 1248,
    "preview": "### Hi folks, I'm Suraj! :sun_with_face:\n\n\n<a href=\"https://in.linkedin.com/in/surajdc\">\n    <img align=\"left\" alt=\"Sura"
  },
  {
    "path": "misc/firstpr/swatirao.md",
    "chars": 84,
    "preview": "Hi, I am swati from mumbai. Know basics of html,css.\nexcited to learn something new\n"
  },
  {
    "path": "misc/firstpr/teckiegeek.md",
    "chars": 1038,
    "preview": "Titi Olopade from United Kingdom. My background is computing with few years career break.\nI came back and got PRINCE2 ce"
  },
  {
    "path": "misc/firstpr/therealjimoh.md",
    "chars": 72,
    "preview": "Abdullah Jimoh, from Nigeria. I am a beginner in Front-end development.\n"
  },
  {
    "path": "misc/firstpr/titi_olopade.md",
    "chars": 1038,
    "preview": "Titi Olopade from United Kingdom. My background is computing with few years career break.\nI came back and got PRINCE2 ce"
  },
  {
    "path": "misc/firstpr/tolga.md",
    "chars": 137,
    "preview": "Tolga Erdönmez,\nFrom Turkey,\nStudent and developer :)\nI like javascript, go, python,\nBuilding web & desktop apps, automa"
  },
  {
    "path": "misc/firstpr/trombley.md",
    "chars": 69,
    "preview": "I am trombley!just making a beginning\n#update one\nThis is a second PR"
  },
  {
    "path": "misc/firstpr/tushar.md",
    "chars": 61,
    "preview": "Tushar Kashyap from India, good with HTML, CSS, JS and React."
  },
  {
    "path": "misc/firstpr/tusharkandpal.md",
    "chars": 605,
    "preview": "\n# **Hey Folks!** <img src=\"https://raw.githubusercontent.com/MartinHeinz/MartinHeinz/master/wave.gif\" width=\"30px\">\n\n\nI"
  },
  {
    "path": "misc/firstpr/varad.md",
    "chars": 204,
    "preview": "Varad Karpe from India\nRecently graduated as a Computer Science Engineer\nExperience:\nI have worked on a few Java project"
  },
  {
    "path": "misc/firstpr/vera_nkanmuo.md",
    "chars": 502,
    "preview": "Hi,I'm Chioma Vera Nkanmuo, Beginner Web developer from Nigeria with basic knowledge of  HTML and  CSS. I am currently i"
  },
  {
    "path": "misc/firstpr/vijaya.md",
    "chars": 107,
    "preview": "Vijaya Bhaskar from Hyderbad, India with 9 years of development experience.\nThis is a second pull request.\n"
  },
  {
    "path": "misc/firstpr/vipin.md",
    "chars": 215,
    "preview": "Hi i am vipin, A frontend developer from Punjab mostly working on react native trying to learn advance javascript and no"
  },
  {
    "path": "misc/firstpr/viraj_patil.md",
    "chars": 253,
    "preview": "** Second PR **\n\nHi, I'm Viraj Patil, with 9 years of experience in software development.\n\nCurrently working as fullstac"
  },
  {
    "path": "misc/firstpr/wamuyuwanjohi",
    "chars": 67,
    "preview": "Wamuyu Wanjohi : Kenyan Junior Data NAalyst who enjoys a bit of DS\n"
  },
  {
    "path": "misc/firstpr/yash.md",
    "chars": 153,
    "preview": "Yash Gupta from India.\nWeb developer and currently in Final year of college.\nSkill-HTML, CSS, Javascript, React, NodeJs."
  },
  {
    "path": "misc/playground/cli/README.md",
    "chars": 181,
    "preview": "# Folder Naming Convention\n> Place your code inside a folder\n### Use dashes(-) as delimiters\n### Use lowercase letters\n#"
  },
  {
    "path": "misc/playground/cli/spike/HackerNews/code.js",
    "chars": 2469,
    "preview": "const fetch = require(\"node-fetch\");\n\nasync function searchFor(searchTerm) {\n  const queryResult = [];\n  const url = `ht"
  },
  {
    "path": "misc/playground/cli/spike/HackerNews/code2.js",
    "chars": 5349,
    "preview": "const fetch = require(\"node-fetch\");\n//only story ids\nasync function searchFor() {\n  const frontStoryIDs = [];\n  const u"
  },
  {
    "path": "misc/playground/cli/spike/HackerNews/mainindex.js",
    "chars": 352,
    "preview": "const { constructObjectArray } = require(\"./code\");\nconst Renderer = require(\"./renderer\");\n\nasync function news(keyword"
  },
  {
    "path": "misc/playground/cli/spike/HackerNews/renderer/index.js",
    "chars": 507,
    "preview": "//const { generateEpub } = require(\"./epub/index\");\nconst { generatePDF } = require(\"./pdf\");\n//const spinner = require("
  },
  {
    "path": "misc/playground/cli/spike/HackerNews/renderer/pdf/createpdf.js",
    "chars": 1555,
    "preview": "// @ts-check\nconst puppeteer = require(\"puppeteer\");\n\nfunction footerMarkup() {\n  return `\n  <div class=\"footer\" style=\""
  },
  {
    "path": "misc/playground/cli/spike/HackerNews/renderer/pdf/index.js",
    "chars": 464,
    "preview": "const { renderTemplate } = require(\"../render-template\");\nconst { createPdf } = require(\"./createpdf\");\n\n\nasync function"
  },
  {
    "path": "misc/playground/cli/spike/HackerNews/renderer/render-template.js",
    "chars": 927,
    "preview": "const { readFile, writeFile } = require(\"fs\").promises;\nconst hbs = require(\"handlebars\");\nconst { tmpdir } = require(\"o"
  },
  {
    "path": "misc/playground/cli/spike/HackerNews/renderer/template/template.hbs",
    "chars": 543,
    "preview": "<html>\n\n<head>\n    <meta charset=\"UTF-8\">\n\n</head>\n\n<body>\n    <h1 id=\"title\">\n        <center>Stories from Hacker News<"
  },
  {
    "path": "misc/playground/cli/spike/README.md",
    "chars": 15,
    "preview": "# Spike or POC\n"
  },
  {
    "path": "misc/playground/cli/spike/cli-epub/.gitignore",
    "chars": 61,
    "preview": "#node modules\nnode_modules/\n\n#ebook files\n*.mobi\n*.pdf\n*.epub"
  },
  {
    "path": "misc/playground/cli/spike/cli-epub/epub.js",
    "chars": 847,
    "preview": "import epub from 'epub-gen';\n\nconst options = {\n   title: 'The Hello World',\n   author: 'Hello MacWorld',\n   content: [\n"
  },
  {
    "path": "misc/playground/cli/spike/cli-epub/index.js",
    "chars": 789,
    "preview": "import yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { generateEpub } from \"./epub.js\";\n\nconst opt"
  },
  {
    "path": "misc/playground/cli/spike/cli-epub/package.json",
    "chars": 336,
    "preview": "{\n  \"name\": \"cli-epub\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Generate cli from text input\",\n  \"main\": \"index.js\",\n  \""
  },
  {
    "path": "misc/playground/cli/spike/cli-epub/readme.md",
    "chars": 423,
    "preview": "To start\r\n\r\n`node index -o <file format> -n <filename>`\r\n\r\nOptions:\r\n```\r\n      --help        Show help\r\n      --version"
  },
  {
    "path": "misc/playground/cli/spike/cli-example-esm/.gitignore",
    "chars": 28,
    "preview": "#node modules\nnode_modules/\n"
  },
  {
    "path": "misc/playground/cli/spike/cli-example-esm/index.js",
    "chars": 382,
    "preview": "import axios from 'axios';\n\nconst getBreeds = async () => {\n  try {\n    return await axios.get('https://dog.ceo/api/bree"
  },
  {
    "path": "misc/playground/cli/spike/cli-example-esm/package.json",
    "chars": 396,
    "preview": "{\n  \"name\": \"cli-example-esm\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Example of how to use ES6+ syntax to run node scr"
  },
  {
    "path": "misc/playground/cli/spike/cli-example-esm/readme.md",
    "chars": 429,
    "preview": "### Intro\nThis playground script is to give proof of concept idea to show we can write ES6+ syntax in JS files and run w"
  },
  {
    "path": "misc/playground/cli/spike/json-to-pdf-cli/Readme.md",
    "chars": 949,
    "preview": "# Theme\n\n - Simple nodejs CLI application for convert the JSON files to PDF\n\n# Requirements\n\n - Node.js 10.x.x\n\n# workfl"
  },
  {
    "path": "misc/playground/cli/spike/json-to-pdf-cli/output.css",
    "chars": 740,
    "preview": "#title {\n  text-align: center;\n}\n\nul li {\n  list-style: none;\n}\n\n.tweetContainer {\n  display: flex;\n  flex-direction: co"
  },
  {
    "path": "misc/playground/cli/spike/json-to-pdf-cli/output.html",
    "chars": 2588,
    "preview": "<!doctype html>\n<html lang=\"en\" dir=\"ltr\">\n<head>\n<title>Twindle</title>\n<meta charset=\"utf-8\">\n\n\n<link rel=\"stylesheet\""
  },
  {
    "path": "misc/playground/cli/spike/json-to-pdf-cli/package.json",
    "chars": 404,
    "preview": "{\n  \"name\": \"fetch-json-data\",\n  \"version\": \"1.0.0\",\n  \"description\": \"convert json data to pdf\",\n  \"main\": \"script.js\","
  },
  {
    "path": "misc/playground/cli/spike/json-to-pdf-cli/script.js",
    "chars": 2096,
    "preview": "const Mustache = require(\"mustache\");\nconst fs = require(\"fs\");\nconst createHTML = require(\"create-html\");\nconst htmlToP"
  },
  {
    "path": "misc/playground/cli/spike/json-to-pdf-cli/tweet_template.mustache",
    "chars": 597,
    "preview": "<div>\n<h1 id=\"title\">Twindle</h1>\n    <ul>\n        {{!-- uses the twit mock object from mock API --}}\n        {{#tweets}"
  },
  {
    "path": "misc/playground/cli/spike/json-to-pdf-cli/twit_thread.json",
    "chars": 1236,
    "preview": "[\n  {\n    \"name\": \"Pranav\",\n    \"twitterHandle\": \"Pranav\",\n    \"image\": \"https://pbs.twimg.com/profile_images/1256841238"
  },
  {
    "path": "misc/playground/cli/spike/markdown/index.js",
    "chars": 297,
    "preview": "const markdown = (name , tweet , url , username)=>{\nreturn(\n  '### ' + tweet + '\\n'+'![img]('+url+')'+'\\n'+name+' | '+us"
  },
  {
    "path": "misc/playground/cli/spike/pdf-from-html-cli/README.md",
    "chars": 457,
    "preview": "# Creating PDFs from HTML using Puppeteer\n\n## This simple module creates pdf documents using tweet threads\n\n### To Run\n\n"
  },
  {
    "path": "misc/playground/cli/spike/pdf-from-html-cli/create-pdf.js",
    "chars": 691,
    "preview": "const puppeteer = require(\"puppeteer\");\nconst fs = require(\"fs\");\n\n// Creates a pdf document from htmlContent and saves "
  },
  {
    "path": "misc/playground/cli/spike/pdf-from-html-cli/examples/Twindle.html",
    "chars": 2849,
    "preview": "<style type=\"text/css\">\n    * {\n        font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubun"
  },
  {
    "path": "misc/playground/cli/spike/pdf-from-html-cli/index.js",
    "chars": 517,
    "preview": "const renderTemplate = require(\"./render-template\");\nconst createPdf = require(\"./create-pdf\");\n// const fs = require(\"f"
  },
  {
    "path": "misc/playground/cli/spike/pdf-from-html-cli/package.json",
    "chars": 315,
    "preview": "{\n\t\"name\": \"pdf-from-html-cli\",\n\t\"version\": \"1.0.0\",\n\t\"description\": \"Creates pdf from html using puppeteer and handleba"
  },
  {
    "path": "misc/playground/cli/spike/pdf-from-html-cli/render-template.js",
    "chars": 548,
    "preview": "const hbs = require(\"handlebars\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\n\n// renders the html template"
  },
  {
    "path": "misc/playground/cli/spike/pdf-from-html-cli/templates/Thread.hbs",
    "chars": 1874,
    "preview": "<style type=\"text/css\">\n    * {\n        font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubun"
  },
  {
    "path": "misc/playground/cli/spike/pdf-from-json/Readme.md",
    "chars": 155,
    "preview": "# How to run\n\nTo run this file,\nclone or download this folder.\n\nIn command line, after navigating to this folder, run:\n\n"
  },
  {
    "path": "misc/playground/cli/spike/pdf-from-json/index.js",
    "chars": 1488,
    "preview": "// can import this from json\nconst data = [\n  {\n    name: 'Naval',\n    twitterHandle: 'naval',\n    image:\n      'https:/"
  },
  {
    "path": "misc/playground/cli/spike/pdf-from-json/package.json",
    "chars": 318,
    "preview": "{\n  \"name\": \"pdf\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"E"
  },
  {
    "path": "misc/playground/cli/spike/phase2-server/api/index.js",
    "chars": 742,
    "preview": "const { default: Axios } = require(\"axios\");\n\nclass API {\n static async getTwitterThread(req, res) {\n  try {\n   // Obtai"
  },
  {
    "path": "misc/playground/cli/spike/phase2-server/config/index.js",
    "chars": 411,
    "preview": "const express = require(\"express\");\nconst { loggingMiddleware, twitterMiddleware } = require(\"../middlewares\");\nconst { "
  },
  {
    "path": "misc/playground/cli/spike/phase2-server/environment.js",
    "chars": 284,
    "preview": "const Env = require(\"dotenv\");\n\nEnv.config();\n\n// Inject the Twitter api endpoint from the environment\nmodule.exports.TW"
  },
  {
    "path": "misc/playground/cli/spike/phase2-server/index.js",
    "chars": 277,
    "preview": "const express = require(\"express\")\nlet app = express();\nconst log = require(\"debug\")(\"app\");\nconst config = require(\"./c"
  },
  {
    "path": "misc/playground/cli/spike/phase2-server/middlewares/index.js",
    "chars": 133,
    "preview": "module.exports.twitterMiddleware = require(\"./twitter\").http;\nmodule.exports.loggingMiddleware = require(\"./request-logg"
  },
  {
    "path": "misc/playground/cli/spike/phase2-server/middlewares/request-logger.js",
    "chars": 236,
    "preview": "const log = require(\"debug\")(\"requests\");\n\nmodule.exports.logger = (req, res, next) => {\n // Log request details and res"
  },
  {
    "path": "misc/playground/cli/spike/phase2-server/middlewares/twitter.js",
    "chars": 686,
    "preview": "const { TWITTER_API_URL, TWITTER_API_KEY } = require(\"../environment\");\n\nmodule.exports.http = (req, res, next) => {\n tr"
  },
  {
    "path": "misc/playground/cli/spike/phase2-server/package.json",
    "chars": 427,
    "preview": "{\n  \"name\": \"server\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo "
  },
  {
    "path": "misc/playground/cli/spike/phase2-server/router/api/index.js",
    "chars": 187,
    "preview": "const { Router } = require(\"express\");\nconst { API } = require(\"../../api\");\n\nconst router = Router();\n\nrouter.post(\"/co"
  },
  {
    "path": "misc/playground/cli/spike/phase2-server/router/index.js",
    "chars": 104,
    "preview": "module.exports.api = require(\"./api\").apiRouter;\nmodule.exports.pages = require(\"./pages\").pagesRouter;\n"
  }
]

// ... and 216 more files (download for full content)

About this extraction

This page contains the full source code of the twindle-co/twindle GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 416 files (729.3 KB), approximately 199.2k tokens, and a symbol index with 290 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!