├── .all-contributorsrc
├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ ├── feature_request.md
│ └── new_docs_section.md
└── workflows
│ ├── playwright.yml
│ └── vitest.yml
├── .gitignore
├── .stylelintrc.json
├── .vscode
├── extensions.json
├── launch.json
└── settings.json
├── E2E
├── Articles.test.ts
├── DocsButton.test.ts
└── StarButton.test.ts
├── LICENSE
├── README.md
├── astro.config.mjs
├── package-lock.json
├── package.json
├── playwright.config.ts
├── postcss.config.cjs
├── prettier.config.ts
├── public
├── favicon.ico
├── fonts
│ ├── Inter-Regular.woff2
│ ├── Nunito-Italic-VariableFont_wght.woff2
│ ├── Nunito-VariableFont_wght.woff2
│ ├── Poppins-Black.ttf
│ ├── Poppins-BlackItalic.ttf
│ ├── Poppins-Bold.ttf
│ ├── Poppins-BoldItalic.ttf
│ ├── Poppins-ExtraBold.ttf
│ ├── Poppins-ExtraBoldItalic.ttf
│ ├── Poppins-ExtraLight.ttf
│ ├── Poppins-ExtraLightItalic.ttf
│ ├── Poppins-Italic.ttf
│ ├── Poppins-Light.ttf
│ ├── Poppins-LightItalic.ttf
│ ├── Poppins-Medium.ttf
│ ├── Poppins-MediumItalic.ttf
│ ├── Poppins-Regular.ttf
│ ├── Poppins-SemiBold.ttf
│ ├── Poppins-SemiBoldItalic.ttf
│ ├── Poppins-Thin.ttf
│ └── Poppins-ThinItalic.ttf
├── icons
│ ├── hourglass.svg
│ ├── savings.svg
│ └── school_hat.svg
├── images
│ ├── css
│ │ ├── components.webp
│ │ ├── css_exercises_1_3.webp
│ │ ├── css_exercises_2_3.webp
│ │ ├── css_exercises_3_3.webp
│ │ ├── flex_basis_grow_shrink.webp
│ │ ├── flex_shorthand.webp
│ │ ├── tailwind_ally1.png
│ │ ├── tailwind_ally2.png
│ │ ├── tailwind_typesafe.png
│ │ ├── tailwind_variants.png
│ │ └── unsprinkle.webp
│ ├── logo.svg
│ ├── misc
│ │ ├── pl_hr_response.webp
│ │ ├── projekt.webp
│ │ └── puzzle.webp
│ ├── nukp-logo.webp
│ ├── promo
│ │ ├── about-us.svg
│ │ └── wavy-edu.svg
│ ├── react
│ │ ├── react-fetching-1_3.webp
│ │ ├── react-fetching-2_3.webp
│ │ └── react-fetching-3_3.webp
│ └── starButton
│ │ └── star-icon.svg
├── make-scrollable-code-focusable.js
├── metaimage.png
└── metaimages
│ ├── css.png
│ ├── git.png
│ ├── html.png
│ ├── javascript.png
│ ├── nextjs.png
│ ├── nodejs.png
│ ├── react.png
│ ├── redux.png
│ ├── testing.png
│ └── typescript.png
├── src
├── components
│ ├── DonationModal
│ │ ├── DonationButton.tsx
│ │ └── DonationModal.tsx
│ ├── GitHubStarLink
│ │ └── GitHubStarLink.astro
│ ├── HeadCommon.astro
│ ├── HeadSEO.astro
│ ├── Header
│ │ ├── GithubStars.tsx
│ │ ├── Header.astro
│ │ ├── Logo.astro
│ │ ├── Search.css
│ │ ├── Search.tsx
│ │ ├── SidebarToggle.tsx
│ │ └── SkipToContent.astro
│ ├── LandingPage
│ │ ├── LandingSEO.astro
│ │ └── VideoEmbed
│ │ │ ├── VideoEmbed.astro
│ │ │ └── helpers.ts
│ ├── LeftSidebar
│ │ ├── LeftSidebar.astro
│ │ └── SidebarItem.astro
│ ├── PageContent
│ │ └── PageContent.astro
│ ├── RecommendedSections
│ │ └── RecommendedSections.astro
│ ├── Redesign
│ │ ├── ComparisonCard.astro
│ │ ├── LandingElements
│ │ │ └── DocsButton.astro
│ │ ├── LandingPage.astro
│ │ ├── LandingSection.astro
│ │ └── LandingSections
│ │ │ ├── AboutUs.astro
│ │ │ ├── Accordion.tsx
│ │ │ ├── Advantages.astro
│ │ │ ├── FAQ.astro
│ │ │ ├── Footer
│ │ │ ├── BottomFooterSection.astro
│ │ │ ├── Footer.astro
│ │ │ ├── ImageAttribution.astro
│ │ │ ├── LinkGroup.astro
│ │ │ ├── SocialLink.astro
│ │ │ ├── Socials.astro
│ │ │ └── TopFooterSection.astro
│ │ │ └── Hero.astro
│ ├── RightSidebar
│ │ ├── MoreMenu.astro
│ │ ├── RightSidebar.astro
│ │ ├── TableOfContents.module.scss
│ │ ├── TableOfContents.tsx
│ │ └── ThemeToggleButton.tsx
│ ├── common
│ │ └── GlowText.astro
│ └── utility
│ │ ├── CopyCodeToClipboard
│ │ ├── CopyCodeToClipboard.astro
│ │ └── helpers.ts
│ │ └── HeadingLinksCopyToClipboard
│ │ ├── HeadingLinksCopyToClipboard.astro
│ │ ├── copyIconSVG.ts
│ │ └── helpers.ts
├── config.ts
├── data
│ └── vscode.data.ts
├── env.d.ts
├── hooks
│ ├── usePersistedState.ts
│ └── usePrefersReducedMotion.ts
├── layouts
│ └── MainLayout.astro
├── pages
│ ├── 404.astro
│ ├── README.md
│ ├── common
│ │ ├── english.md
│ │ ├── hr_recruitment_resources.md
│ │ ├── job_boards.md
│ │ ├── learning_to_learn.md
│ │ ├── productivity.md
│ │ └── programmer_pov.md
│ ├── docs
│ │ └── assets
│ │ │ ├── css
│ │ │ ├── components.webp
│ │ │ ├── css_exercises_1_3.webp
│ │ │ ├── css_exercises_2_3.webp
│ │ │ ├── css_exercises_3_3.webp
│ │ │ ├── flex_basis_grow_shrink.webp
│ │ │ ├── flex_shorthand.webp
│ │ │ └── unsprinkle.webp
│ │ │ ├── misc
│ │ │ ├── pl_hr_response.png
│ │ │ └── projekt.png
│ │ │ └── react
│ │ │ ├── react-fetching-1_3.png
│ │ │ ├── react-fetching-2_3.png
│ │ │ └── react-fetching-3_3.png
│ ├── index.astro
│ ├── introduction.md
│ ├── principles
│ │ ├── clean_code.md
│ │ ├── design_patterns.md
│ │ ├── design_ui_ux.md
│ │ ├── frontend.md
│ │ ├── how_web_works.md
│ │ └── testing.md
│ ├── resources
│ │ ├── _exercises
│ │ │ ├── css4js.md
│ │ │ ├── frontend_platforms.md
│ │ │ └── practice_css_problems.md
│ │ ├── _questions
│ │ │ ├── advanced_questions.md
│ │ │ ├── css.md
│ │ │ ├── javascript.md
│ │ │ ├── react.md
│ │ │ ├── recruitment_tasks.md
│ │ │ └── typescript.md
│ │ ├── build_your_project.md
│ │ ├── complete_project.md
│ │ ├── content_creators.md
│ │ ├── other_resources.md
│ │ └── test_your_skills.mdx
│ ├── software
│ │ ├── development_setup.md
│ │ ├── other_tools.md
│ │ ├── repository_tools.md
│ │ ├── vim.md
│ │ └── vscode.mdx
│ └── technologies
│ │ ├── css.md
│ │ ├── git.md
│ │ ├── html.md
│ │ ├── javascript.md
│ │ ├── nextjs.md
│ │ ├── nodejs.md
│ │ ├── react.md
│ │ ├── redux.md
│ │ └── typescript.md
├── styles
│ ├── docs.scss
│ └── themes
│ │ └── tailwind.css
└── utils
│ ├── addPluralFormEnding.ts
│ ├── filePath.mjs
│ ├── getDateTimeComponents.ts
│ ├── millisecondsToSeconds.ts
│ ├── millisecondsToTimeUnits.ts
│ ├── modifiedTime.mjs
│ ├── timeSince.test.ts
│ ├── timeSince.ts
│ └── unknownToError.ts
├── static
└── .nojekyll
├── tailwind.config.ts
├── tsconfig.json
├── vercel.json
└── vitest.config.ts
/.all-contributorsrc:
--------------------------------------------------------------------------------
1 | {
2 | "files": [
3 | "README.md"
4 | ],
5 | "imageSize": 100,
6 | "commit": false,
7 | "contributors": [
8 | {
9 | "login": "goodideagiver",
10 | "name": "prplblck",
11 | "avatar_url": "https://avatars.githubusercontent.com/u/55458485?v=4",
12 | "profile": "https://purpleblack.dev/",
13 | "contributions": [
14 | "doc",
15 | "maintenance"
16 | ]
17 | },
18 | {
19 | "login": "Willaiem",
20 | "name": "Damian Żygadło",
21 | "avatar_url": "https://avatars.githubusercontent.com/u/25301582?v=4",
22 | "profile": "https://github.com/Willaiem",
23 | "contributions": [
24 | "code",
25 | "doc",
26 | "infra"
27 | ]
28 | },
29 | {
30 | "login": "Aksa12",
31 | "name": "Aksa12",
32 | "avatar_url": "https://avatars.githubusercontent.com/u/41188167?v=4",
33 | "profile": "https://github.com/Aksa12",
34 | "contributions": [
35 | "maintenance"
36 | ]
37 | },
38 | {
39 | "login": "skoczy01",
40 | "name": "Filip",
41 | "avatar_url": "https://avatars.githubusercontent.com/u/82238474?v=4",
42 | "profile": "https://github.com/skoczy01",
43 | "contributions": [
44 | "maintenance"
45 | ]
46 | },
47 | {
48 | "login": "martindustry",
49 | "name": "Marcin Niemczyk",
50 | "avatar_url": "https://avatars.githubusercontent.com/u/82864230?v=4",
51 | "profile": "https://github.com/martindustry",
52 | "contributions": [
53 | "doc"
54 | ]
55 | },
56 | {
57 | "login": "grzegorzpokorski",
58 | "name": "Grzegorz Pokorski",
59 | "avatar_url": "https://avatars.githubusercontent.com/u/27455716?v=4",
60 | "profile": "http://grzegorzpokorski.pl",
61 | "contributions": [
62 | "a11y"
63 | ]
64 | },
65 | {
66 | "login": "getlaurekt",
67 | "name": "Muszkowy Potworek",
68 | "avatar_url": "https://avatars.githubusercontent.com/u/58201840?v=4",
69 | "profile": "https://github.com/getlaurekt",
70 | "contributions": [
71 | "doc"
72 | ]
73 | }
74 | ],
75 | "contributorsPerLine": 7,
76 | "projectName": "webdev-learning-materials",
77 | "projectOwner": "NowYouKnowProgramming",
78 | "repoType": "github",
79 | "repoHost": "https://github.com",
80 | "skipCi": true,
81 | "commitConvention": "angular",
82 | "commitType": "docs"
83 | }
84 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 | ---
8 |
9 | **Describe the bug**
10 | A clear and concise description of what the bug is.
11 |
12 | **To Reproduce**
13 | Steps to reproduce the behavior:
14 |
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 |
28 | - OS: [e.g. iOS]
29 | - Browser [e.g. chrome, safari]
30 | - Version [e.g. 22]
31 |
32 | **Smartphone (please complete the following information):**
33 |
34 | - Device: [e.g. iPhone6]
35 | - OS: [e.g. iOS8.1]
36 | - Browser [e.g. stock browser, safari]
37 | - Version [e.g. 22]
38 |
39 | **Additional context**
40 | Add any other context about the problem here.
41 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 | ---
8 |
9 | **Is your feature request related to a problem? Please describe.**
10 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
11 |
12 | **Describe the solution you'd like**
13 | A clear and concise description of what you want to happen.
14 |
15 | **Describe alternatives you've considered**
16 | A clear and concise description of any alternative solutions or features you've considered.
17 |
18 | **Additional context**
19 | Add any other context or screenshots about the feature request here.
20 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/new_docs_section.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: New docs
3 | about: Suggest new materials to be added to the docs. Check first if there is an issue for your topic already.
4 | title: ''
5 | labels: ['new docs']
6 | assignees: ''
7 | ---
8 |
9 | # What you want to add to the docs
10 |
11 | > [e.g. MDN docs *here is a link*]
12 |
13 | ## Why it should be added
14 |
15 | > I used it and it's up to date and helped me grow in the web dev field
16 | >
17 | > List of arguments why: ... ... ...
18 |
19 | ## Additional information
20 |
--------------------------------------------------------------------------------
/.github/workflows/playwright.yml:
--------------------------------------------------------------------------------
1 | name: E2E Tests
2 | on:
3 | push:
4 | branches: [ main, master ]
5 | workflow_dispatch:
6 |
7 | jobs:
8 | test:
9 | timeout-minutes: 10
10 | runs-on: ubuntu-20.04
11 | strategy:
12 | matrix:
13 | node-version: [16]
14 | steps:
15 | - uses: actions/checkout@v3
16 | - uses: pnpm/action-setup@v2.2.4
17 | with:
18 | version: 7
19 | - name: Use Node.js ${{ matrix.node-version }}
20 | uses: actions/setup-node@v3
21 | with:
22 | node-version: ${{ matrix.node-version }}
23 | cache: 'pnpm'
24 | - name: Install dependencies
25 | run: pnpm install
26 | - name: Install Playwright Browsers
27 | run: npx playwright install --with-deps
28 | - name : Build app
29 | run: pnpm build
30 | - name: Launch app
31 | run: pnpm preview & sleep 10 && curl http://localhost:3000 && npx playwright test
32 | - uses: actions/upload-artifact@v3
33 | if: always()
34 | with:
35 | name: playwright-report
36 | path: playwright-report/
37 | retention-days: 30
38 |
--------------------------------------------------------------------------------
/.github/workflows/vitest.yml:
--------------------------------------------------------------------------------
1 | name: Unit and Integration Tests
2 |
3 | on:
4 | push:
5 | branches: [main]
6 | pull_request:
7 | branches: [main]
8 |
9 | jobs:
10 | build:
11 | runs-on: ubuntu-20.04
12 | strategy:
13 | matrix:
14 | node-version: [20]
15 | steps:
16 | - uses: actions/checkout@v3
17 | - name: Use Node.js ${{ matrix.node-version }}
18 | uses: actions/setup-node@v3
19 | with:
20 | node-version: ${{ matrix.node-version }}
21 | - name: Install dependencies
22 | run: npm install
23 | - name: Run Vitest
24 | run: npm run test
25 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # build output
2 | dist/
3 |
4 | # dependencies
5 | node_modules/
6 |
7 | # logs
8 | npm-debug.log*
9 | yarn-debug.log*
10 | yarn-error.log*
11 | pnpm-debug.log*
12 |
13 |
14 | # environment variables
15 | .env
16 | .env.production
17 |
18 | # macOS-specific files
19 | .DS_Store
20 | /test-results/
21 | /playwright-report/
22 | /playwright/.cache/
23 | .temp*
24 |
--------------------------------------------------------------------------------
/.stylelintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["stylelint-config-standard"]
3 | }
4 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "astro-build.astro-vscode",
4 | "rioukkevin.vscode-git-commit",
5 | "esbenp.prettier-vscode",
6 | "bradlc.vscode-tailwindcss",
7 | "streetsidesoftware.code-spell-checker"
8 | ],
9 | "unwantedRecommendations": []
10 | }
11 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "command": "./node_modules/.bin/astro dev",
6 | "name": "Development server",
7 | "request": "launch",
8 | "type": "node-terminal"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "vscodeGitCommit.template": [
3 | "{type}: {action}{what_was_done}\n\n{why_it_was_done}{breaking}"
4 | ],
5 | "vscodeGitCommit.variables": {
6 | "prefix": "keke",
7 | "action": [
8 | {
9 | "label": "",
10 | "detail": "❌ no action to describe"
11 | },
12 | {
13 | "label": "add ",
14 | "detail": "🆕 a new feature is introduced with the changes"
15 | },
16 | {
17 | "label": "remove ",
18 | "detail": "🗑️ removing code or files"
19 | },
20 | {
21 | "label": "update ",
22 | "detail": "🔧 an existing feature is updated with the changes"
23 | },
24 | {
25 | "label": "move ",
26 | "detail": "🚚 moving files, folders or code"
27 | },
28 | {
29 | "label": "fix ",
30 | "detail": "🐛 something was not correct and now it is"
31 | },
32 | {
33 | "label": "change ",
34 | "detail": "🔧 changing code or files without adding or removing"
35 | },
36 | {
37 | "label": "improve ",
38 | "detail": "🏁 performance improvements"
39 | },
40 | {
41 | "label": "setup ",
42 | "detail": "🔧 setting up the project or dependencies"
43 | },
44 | {
45 | "label": "update dependencies ",
46 | "detail": "🔧 updating dependencies"
47 | }
48 | ],
49 | "breaking": [
50 | {
51 | "label": "",
52 | "detail": "❌ no breaking change to describe"
53 | },
54 | {
55 | "label": "\n\nBREAKING CHANGE",
56 | "detail": "💥 a breaking change: a feature that was previously available will now behave differently"
57 | }
58 | ],
59 | "type": [
60 | {
61 | "label": "Feat",
62 | "detail": "🆕 a new feature is introduced with the changes"
63 | },
64 | {
65 | "label": "Fix",
66 | "detail": "🔴 a bug fix has occurred"
67 | },
68 | {
69 | "label": "Refactor",
70 | "detail": "🔧 not bugfix, not feature, but code changes, works the same"
71 | },
72 | {
73 | "label": "Chore",
74 | "detail": "🧹 update dependency / changes to build tools or scripts / code doesn't change"
75 | },
76 | {
77 | "label": "Perf",
78 | "detail": "🏁 performance improvements"
79 | },
80 | {
81 | "label": "Docs",
82 | "detail": "🗄️ updates to documentation such as a the README or other markdown files"
83 | },
84 | {
85 | "label": "Style",
86 | "detail": "✨ changes to code formatting, like spaces or semicolons"
87 | },
88 | {
89 | "label": "Test",
90 | "detail": "🤖 including new or correcting previous tests"
91 | },
92 | {
93 | "label": "Build",
94 | "detail": "👷 changes that affect the build system or external dependencies "
95 | },
96 | {
97 | "label": "CI",
98 | "detail": "👾 continuous integration related"
99 | },
100 | {
101 | "label": "Revert",
102 | "detail": "🤕 reverts a previous commit"
103 | },
104 | {
105 | "label": "WIP",
106 | "detail": "🚧 work in progress"
107 | }
108 | ]
109 | },
110 | }
111 |
--------------------------------------------------------------------------------
/E2E/Articles.test.ts:
--------------------------------------------------------------------------------
1 | import { test, expect } from '@playwright/test'
2 |
3 | test.beforeEach(async ({ page }) => {
4 | await page.goto('http://localhost:3000/')
5 |
6 | const docsButton = page.getByText(/Start learning/).first()
7 |
8 | await docsButton.click()
9 |
10 | await expect(page).toHaveURL(/.*introduction/)
11 | })
12 |
13 | test('JavaScript article is possible to reach', async ({ page }) => {
14 | const javascriptArticleLink = page.getByText(/JavaScript/).first()
15 |
16 | await javascriptArticleLink.click()
17 |
18 | await expect(page).toHaveURL(/.*javascript/)
19 | })
20 |
21 | test('React article is possible to reach', async ({ page }) => {
22 | const reactArticleLink = page.getByText(/React/).first()
23 |
24 | await reactArticleLink.click()
25 |
26 | await expect(page).toHaveURL(/.*react/)
27 | })
28 |
--------------------------------------------------------------------------------
/E2E/DocsButton.test.ts:
--------------------------------------------------------------------------------
1 | import { expect, test } from '@playwright/test'
2 |
3 | test('homepage has title and links to intro page', async ({ page }) => {
4 | await page.goto('http://localhost:3000/')
5 |
6 | // Expect a title "to contain" a substring.
7 | await expect(page).toHaveTitle(/The best way to learn web/)
8 |
9 | // create a locator
10 | const getStarted = page.getByText(/Start learning/).first()
11 |
12 | // Click the get started link.
13 | await getStarted.click()
14 |
15 | // Expects the URL to contain intro.
16 | await expect(page).toHaveURL(/.*introduction/)
17 | })
18 |
--------------------------------------------------------------------------------
/E2E/StarButton.test.ts:
--------------------------------------------------------------------------------
1 | import { test, expect } from '@playwright/test'
2 |
3 | const githubRepoLink =
4 | 'https://github.com/NowYouKnowProgramming/webdev-learning-materials'
5 |
6 | test.beforeEach(async ({ page }) => {
7 | await page.goto('http://localhost:3000/')
8 | })
9 |
10 | test('Button that is a CTA to star project is in the docs page', async ({
11 | page,
12 | }) => {
13 | const docsButton = page.getByText(/Start learning/).first()
14 |
15 | await docsButton.click()
16 |
17 | await expect(page).toHaveURL(/.*introduction/)
18 |
19 | const starButton = page.getByRole('link', { name: /Star/ }).first()
20 |
21 | await expect(starButton).toBeVisible()
22 | await expect(starButton).toHaveAttribute('href', githubRepoLink)
23 | })
24 |
25 | test('CTA button to star project is visible on the landing page', async ({
26 | page,
27 | }) => {
28 | const starButtonLink = page.getByRole('link', { name: /Star \w*/ })
29 |
30 | await expect(starButtonLink).toBeVisible()
31 | await expect(starButtonLink).toHaveAttribute('href', githubRepoLink)
32 | })
33 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | BSD 3-Clause License
2 |
3 | Copyright (c) 2023, bewebdev.tech
4 |
5 | Redistribution and use in source and binary forms, with or without
6 | modification, are permitted provided that the following conditions are met:
7 |
8 | 1. Redistributions of source code must retain the above copyright notice, this
9 | list of conditions and the following disclaimer.
10 |
11 | 2. Redistributions in binary form must reproduce the above copyright notice,
12 | this list of conditions and the following disclaimer in the documentation
13 | and/or other materials provided with the distribution.
14 |
15 | 3. Neither the name of the copyright holder nor the names of its
16 | contributors may be used to endorse or promote products derived from
17 | this software without specific prior written permission.
18 |
19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 🚧🚧🚧🚧🚧
2 | # THIS PROJECT WAS MOVED TO [NEW REPOSITORY](https://github.com/goodideagiver/webdev-learning-materials-1)
3 | # 🚧🚧🚧🚧🚧
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | # bewebdev.tech (Web Development Learning Materials)
13 |
14 | A list of learning materials for Web Development.
15 |
16 | ## Check the website here!
17 |
18 | [](https://ko-fi.com/J3J4761UB)
19 |
20 | ### Contributing
21 |
22 | If you found something interesting, but it's not in the list, please open an issue or, even better, a pull request.
23 |
24 |
😊 We will be happy to check it out and add it.
25 |
26 | ### Website
27 |
28 | This website is built using [Astro](https://astro.build/), a modern static website generator.
29 |
30 | #### Installation
31 |
32 | ```
33 | npm i
34 | ```
35 |
36 | #### Local Development
37 |
38 | ```
39 | npm dev
40 | ```
41 |
42 | This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
43 |
44 | #### Build
45 |
46 | ```
47 | npm build
48 | ```
49 |
50 | This command generates static content into the `dist` directory and can be served using any static contents hosting service.
51 |
52 | ## Contributors ✨
53 |
54 | Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
55 |
56 |
57 |
58 |
59 |
69 | We believe that code review can be the best way to learn best practices
70 | and new ways to write code for both parties - code reviewer and code
71 | writer
72 |
26 | Introducing Bewebdev, your ultimate destination for learning web
27 | development. Why settle for scattered information when we've done the
28 | hard work for you? Discover the best resources, carefully chosen and
29 | verified, all in one convenient place.
30 |
86 |
87 | ))
88 |
--------------------------------------------------------------------------------
/src/components/Redesign/LandingSections/Advantages.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import type { ComparisonCardProps } from '../ComparisonCard.astro'
3 | import ComparisonCard from '../ComparisonCard.astro'
4 | import LandingSection from '../LandingSection.astro'
5 | const comparisonCardData: ComparisonCardProps[] = [
6 | {
7 | icon: '/icons/hourglass.svg',
8 | title: 'Save time',
9 | text: 'We have done the hard work for you. No need to search for resources.',
10 | },
11 | {
12 | icon: '/icons/savings.svg',
13 | title: 'Free',
14 | text: 'Our platform is free to use. No hidden fees or subscriptions.',
15 | },
16 | {
17 | icon: '/icons/school_hat.svg',
18 | title: 'Proven resources',
19 | text: 'We only list resources that have been helpful to other developers. No filler content.',
20 | },
21 | ]
22 | ---
23 |
24 |
25 |
Advantages of using our platform
26 |
27 | {comparisonCardData.map((card) => )}
28 |
29 |
32 |
33 |
36 |
37 |
38 |
39 |
99 |
--------------------------------------------------------------------------------
/src/components/Redesign/LandingSections/FAQ.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import LandingSection from '../LandingSection.astro'
3 | import { AccordionFAQ } from './Accordion'
4 |
5 | const questions = [
6 | {
7 | title: 'What is bewebdev.tech?',
8 | content: `Bewebdev.tech is an exceptional web platform that compiles a curated collection of top-quality resources for learning web development. With a focus on accuracy and relevance, Bewebdev.tech ensures that users can access the most up-to-date and reliable materials in various web development categories. Whether you're a beginner or an experienced developer, this platform is designed to support your learning journey by providing a one-stop hub for honing your skills and staying current in the dynamic field of web development.`,
9 | },
10 | {
11 | title: 'How can I support you?',
12 | content:
13 | 'There is a floating button on the bottom right corner of the page. You can click it to support us.',
14 | },
15 | {
16 | title: 'I want to change something on the website. How can I do that?',
17 | content:
18 | 'You can reach out to us on Discord. We will review your request and make the necessary changes. You can also contribute to the website on GitHub or create an Issue with detailed description of your concerns.',
19 | },
20 | {
21 | title: "I want to support you, but I don't have money. What can I do?",
22 | content:
23 | 'You can share this website with your friends, spread the word about it. That would be a great help!',
24 | },
25 | {
26 | title: 'How can I request a code review on your YouTube channel?',
27 | content:
28 | 'Reach out to us on Discord. We will review your code and upload it to our channel.',
29 | },
30 | {
31 | title: 'Is bewebdev free to use?',
32 | content:
33 | 'Yes it is. You can use it for free. Just press the Start Learning button and you are good to go.',
34 | },
35 | ]
36 | ---
37 |
38 |
39 |
87 |
--------------------------------------------------------------------------------
/src/pages/common/english.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Learn English
3 | description: English learning materials and tools
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Practice speaking in English
8 |
9 | - [Learning English community which you can speak with other members (from A1 to C2 language level)](https://discord.gg/english)
10 | - [Serenade.ai - really interesting tool to control VS Code / Chrome / etc. with English words](https://serenade.ai/)
11 | - [Italki - practice with different semi-native/native speakers](https://www.italki.com/)
12 | - [Preply - same as Italki](https://preply.com/)
13 | - [Elsa Speak - speak English and get instant feedback from AI-powered coach](https://elsaspeak.com/en/)
14 |
15 | ## Learn grammar
16 |
17 | - [Grammarly - a browser plugin to correct English grammar mistakes](https://www.grammarly.com/)
18 |
19 | ## Translators and dictionaries
20 |
21 | - [Rememberry - a Chrome plugin which translates when text is selected](https://chrome.google.com/webstore/detail/rememberry-translate-and/dipiagiiohfljcicegpgffpbnjmgjcnf)
22 | - [Diki - słownik angielsko-polski](http://diki.pl/)
23 | - [DeepL](https://www.deepl.com/pl/translator)
24 |
--------------------------------------------------------------------------------
/src/pages/common/hr_recruitment_resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: HR / Recruitment Resources
3 | description: What you need to know about recruitment processes while applying for developer jobs. Create and test your resume
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Perfect resume
8 |
9 | ### Create your resume
10 |
11 | - [FlowCV](https://flowcv.io/)
12 | - [Resume Template in Figma](https://www.figma.com/community/file/1104429213755894357)
13 |
14 | ### Check your resume
15 |
16 | - [Jobscan - scan your resume and optimize it to match offers keywords](https://www.jobscan.co/)
17 | - [CV Duck - check your CV by experienced recruiters and get feedback](https://cvduck.pro/)
18 |
19 | ## How to apply to jobs
20 |
21 | - [Josh Fluke - Ignore Job Requirements & Apply Anyway!](https://www.youtube.com/watch?v=NaPezvkzl8U)
22 |
23 | ## How to nail interviews
24 |
25 | - [Technical Interview Guide for Busy People](https://www.techinterviewhandbook.org/)
26 | - [Addy Osmani - About importance of soft skills](https://addyosmani.com/blog/software-engineering-soft-parts/)
27 | - [Rough Guide to Frontend Interviews - image](https://media.discordapp.net/attachments/918032586809438258/933647593752363018/ekcpgo047q881.png)
28 | - [Fireship - How to NOT Fail a Technical Interview](https://www.youtube.com/watch?v=1t1_a1BZ04o)
29 | - [Web Dev Simplified - Can You Beat Me At This Interview?](https://youtu.be/ud8QZIdBxPw)
30 | - [The really important job interview questions engineers should ask](https://posthog.com/blog/what-to-ask-in-interviews?utm_source=substack&utm_medium=email)
31 |
32 | ## Your portfolio matters, how to stand out as a developer
33 |
34 | - [Dawid Mazur - Hiring from developer's point of view: Your GitHub profile](https://www.linkedin.com/feed/update/urn:li:activity:6900405038557339648)
35 | - [Josh W. Comeau - Building an Effective Dev Portfolio](https://www.joshwcomeau.com/effective-portfolio/download-book/)
36 |
37 | ## How to get a job without experience
38 |
39 | - [Jason Tu - How to get a job in a new industry without experience (interesting approach to this problem)](https://jasont.co/no-experience/)
40 |
41 | ## Networking tips for developers
42 |
43 | - [Dev Agrawal - Your Professional Networking Questions Answered](https://www.youtube.com/watch?v=So0owNSsaFg)
44 | - [Dev Agrawal - How to make other people give you a job](https://www.youtube.com/watch?v=b0Eqv0YrfIw)
45 |
46 | ## Different approaches to job seeking
47 |
48 | - [If you're too honest, it's harder for you to get a job](https://youtu.be/6ufwxkurKKg)
49 | - [Web Dev Simplified - How to land your first job (3 tips)](https://www.youtube.com/watch?v=fO5Sx7l6Nps)
50 | - [Fireship - How to Land a 100K/yr Tech Job - 10 Strategies](https://www.youtube.com/watch?v=Xg9ihH15Uto)
51 | - [Reddit Post - How to find companies that are looking for entry/junior developers?](https://www.reddit.com/r/cscareerquestions/comments/wy8za7/how_to_find_companies_with_a_low_barbarrier_of/)
52 | - [How I got my first job as a developer by making simple projects seem big](https://dev.to/yuridevat/how-i-got-my-first-job-as-a-developer-by-making-simple-projects-seem-big-48oi)
53 | - [My First Year as a Professional Developer – Tips for Getting into Tech](https://www.freecodecamp.org/news/my-first-year-as-a-professional-developer-tips-for-getting-into-tech)
54 | - [Scrimba - Reach out to Recruiters on LinkedIn (as a Developer)](https://www.youtube.com/watch?v=_HNbfOMLIO8)
55 |
56 | ## Other recruitment materials
57 |
58 | - [Reddit Post - Should I quit? (what to do when the job sucks)](https://www.reddit.com/r/reactjs/comments/vyrhsx/should_i_quit/)
59 | - [ThePrimeagon - So now what..? (how to find the job in a layoff crisis)](https://www.youtube.com/watch?v=ReeLQR7KCcM)
60 | - [ThePrimeTime - How To Never Get A Job](https://www.youtube.com/watch?v=YFhxQ8kmJw0)
61 |
62 | ### Other recruitment materials in Polish
63 |
64 | - [5 tipów, jak zwiększyć swoje szanse na pracę w IT - Just Geek IT](https://geek.justjoin.it/5-tipow-jak-zwiekszyc-swoje-szanse-na-prace-w-it/)
65 | - [Jak zacząć programować? - Ile zajmuje dostanie pierwszej pracy jako programist(k)a? 🕒](https://www.youtube.com/watch?v=h-WhTkpe6vk)
66 | - [Jak zacząć progrmować? - Jak dostać pierwszą pracę w 2023?](https://www.youtube.com/watch?v=MaVR9wvxkeo)
67 | - [Jak zacząć programować? - Ile CV trzeba wysłać, żeby dostać pierwszą pracę w IT?](https://www.youtube.com/watch?v=CHHSwbuE3LQ)
68 | - [Localhost Academy - "Cała prawda" o rekrutacjach w branży IT - jak dostać pracę i "mroczny sekret rekruterów" (mocne) [zaczyna się od 27:45]](https://youtu.be/Mp7HTWZ6FyE?t=1665)
69 | - [Geekowojażer - Rekrutacja IT z perspektywy programisty seniora](https://www.geekowojazer.pl/rekrutacja-it-programista/)
70 | - [Programistyczny preworkout na rozmowy rekrutacyjne - 11 konceptów, które warto znać](https://app.minicoursegenerator.com/5RgSg_hWwEebgf1KuVnzFA/1)
71 | - [Just Geek IT - Co może zaskoczyć osoby wchodzące do branży IT?](https://geek.justjoin.it/co-moze-zaskoczyc-osoby-wchodzace-do-branzy-it)
72 | - [WDI 2022 - Cezary Walenciuk - Ogniste pytania rekrutacyjne dla WebDev. Uzupełnij wiedzę](https://www.youtube.com/watch?v=nCEEa3CY_m0)
73 | - Jak odebrać informację zwrotną od rekrutera?
74 | 
75 |
--------------------------------------------------------------------------------
/src/pages/common/job_boards.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Job Boards (find your dream job)
3 | description: Online job boards for developers and other IT positions
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Find IT job online
8 |
9 | - [LinkedIn](https://www.linkedin.com)
10 | - [JustJoinIT](https://justjoin.it/all/javascript)
11 | - [NoFluffJobs](https://nofluffjobs.com/pl/frontend)
12 | - [FB - Praca w IT dla Stażystów i Juniorów (IT Jobs for Intern/Junior)](https://www.facebook.com/groups/1561984417428846/)
13 |
--------------------------------------------------------------------------------
/src/pages/common/learning_to_learn.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Learning to learn
3 | description: All these learning materials out there are great, but how to utilize them in best possible way. Best advices about learning stuff
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Free content about efficient learning
8 |
9 | - [How To Learn Any New Programming Skill Fast - YouTube: Web Dev Simplified](https://youtu.be/CJJtA1NTqN4)
10 | - [The Growth Mindset](https://www.youtube.com/watch?v=-71zdXCMU6A)
11 | - [Khan Academy - High school activities: Growth mindset](https://www.khanacademy.org/college-careers-more/learnstorm-growth-mindset-activities-us/high-school-activities/activity-1-the-truth-about-your-brain-hs-02/a/the-truth-about-your-brain-part-1-3?modal=1)
12 | - ["Your Theme"](https://www.youtube.com/watch?v=NVGuFdX5guE)
13 | - [Josh W. Comeau - How to learn stuff quickly](https://www.joshwcomeau.com/blog/how-to-learn-stuff-quickly/)
14 | - [An Approach to Continuous Learning](https://dev.to/abh1navv/an-approach-to-continuous-learning-30pk)
15 | - [The Last Game Dev Advice You Need, a lesson about failing fast to learn from your mistakes - YouTube: Mental Checkpoint](https://youtu.be/L-zKm6c8_IE)
16 | - [Reddit Post - Most of you need to SLOW DOWN](https://www.reddit.com/r/learnprogramming/comments/vvsw0x/most_of_you_need_to_slow_down/)
17 |
18 | ## Paid content about efficient learning
19 |
20 | - [Zero to Mastery - Learning to Learn](https://academy.zerotomastery.io/p/learning-to-learn-efficient-learning-zero-to-mastery-blueprint)
21 |
22 | ## How to take notes when learning
23 |
24 | - [Personal project notes - Obsidian template for notes taking](https://codex.erisianrite.com/System/Templates/Personal+Project+Template)
25 |
26 | ## Plan your learning
27 |
28 | - [Roadmap.sh - a starting point to learn code, roadmaps, guides and other educational content to help guide the developers in picking up the path and guide their learnings](https://roadmap.sh/)
29 | - [JetBrains Academy - Frontend Developer Path (learn HTML, CSS, JavaScript, React and more!)](https://hyperskill.org/tracks/5)
30 |
31 | ## Tips from pros
32 |
33 | - [Web Dev Simplified - Learn Any New Framework/Language FAST With These 5 Steps](https://www.youtube.com/watch?v=zTAWYY5cb0M)
34 | - [ThePrimeagen - How I Became A Better Programmer](https://www.youtube.com/watch?v=cgXfWo42gig)
35 | - [Stefan Mischook - Should I Take a Break from Learning CSS? (when to take a break from learning anything)](https://www.youtube.com/watch?v=78tNu4f91oM)
36 | - [Fireship - How to "Google It" like a Senior Software Engineer](https://www.youtube.com/watch?v=cEBkvm0-rg0)
37 | - [Web Dev Cody - How do I manage my time](https://www.youtube.com/watch?v=X22NmS_LG7Q)
38 | - [Web Dev Cody - How do I learn new programming languages, frameworks, or libraries?](https://www.youtube.com/watch?v=QzUgNr1f4iY)
39 | - [Web Dev Cody - You'll always be learning as a software engineer](https://www.youtube.com/watch?v=gl5HvBpUbt8)
40 |
41 | ## Polish content about learning
42 |
43 | - [Programista vs wiedza (skąd czerpać wiedzę, na jakich kursach się skupić, na co zwracać uwagę na kolejnych etapach kariery) – #40 Taby vs spacje](https://www.youtube.com/watch?v=N0KIOogRIgQ)
44 |
--------------------------------------------------------------------------------
/src/pages/common/productivity.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Productivity and time management
3 | description: Videos about productivity and time management, tools for taking notes and productivity ideas
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Videos about productivity and time management
8 |
9 | ### Polish videos
10 |
11 | - [Produktywność wg CodeTwo - poznaj metody zarządzania pracą w firmie](https://youtu.be/79mlKwej_Nk)
12 |
13 | ## Brain dumps - take notes to relieve your mind
14 |
15 | Save your brain from remembering everything. Write down your thoughts and ideas. It will help you to focus on the most important things. You can use a notebook, but it is much easier to use a digital tool.
16 |
17 | I use [brain dumps](https://psychcentral.com/health/using-brain-dumping-to-manage-anxiety-and-over-thinking#definition) to save my ideas, thoughts, tasks, and other things that I want to tell myself in the next day of work.
18 |
19 | ## Productivity tools
20 |
21 | ### Project management tools
22 |
23 | - [Asana](https://asana.com/)
24 |
25 | ### Tools for taking notes
26 |
27 | - [Obsidian.md - powerful and extensible knowledge base that works on top of your local folder of plain text files](https://obsidian.md/)
28 | - [Notion - really amazing tool to make notes and organize your thoughts](https://notion.so/)
29 |
--------------------------------------------------------------------------------
/src/pages/common/programmer_pov.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Programmer point of view
3 | description: How it is like to be a programmer
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Daily tasks, programmer's life
8 |
9 | - [Reddit Post - Frontend (React) Developers: what tasks do you do on a daily basis?](https://www.reddit.com/r/reactjs/comments/wkv6g4/frontendreact_developers_what_tasks_do_you_do_on/)
10 | - [Code Creative - Day In The Life of a Software Enginner (probably the most real-world one)](https://www.youtube.com/watch?v=c5z85kfof6w)
11 |
12 | ## Pros answer questions
13 |
14 |
15 |
16 | Seria "Od Juniora do Seniora"- zbiór różnych ciekawych pytań od juniorów, opowiedziane przez różnych seniorów: o doświadczeniu - geek.justjoin.it
17 |
18 | - [Część 1](https://geek.justjoin.it/pytania-spolecznosc-it)
19 | - [Część 2](https://geek.justjoin.it/pytania-od-juniora-do-seniora)
20 | - [Część 3](https://geek.justjoin.it/od-juniora-do-seniora-spolecznosc)
21 |
22 |
23 |
24 | ## Career path advices
25 |
26 | - [Kenny Gunderman - Should You Learn Native or Cross-Platform Mobile Development?](https://youtu.be/Mq_HS-o-v6o)
27 | - [Web Dev Junkie - My list of advanced web development topics you should learn](https://www.youtube.com/watch?v=5PWXfjCCm1g)
28 | - [Code Creative - 3 Skills That Will Help You Succeed as a Junior Developer](https://www.youtube.com/watch?v=I0Erp3w8qu4)
29 | - [Aaron Jack - How “Overemployed” Programmers Are Earning Multiple FULL TIME Salaries](https://www.youtube.com/watch?v=oR-mzzIsHVE)
30 | - [mayuko - What does "Senior" Software Engineer mean? (From a Senior Software Engineer)](https://www.youtube.com/watch?v=ys7V9JSTE5A)
31 |
32 | ## Valuable tips from pros
33 |
34 | - [Kent C. Dodds - Stop being a junior developer](https://kentcdodds.com/blog/stop-being-a-junior)
35 | - [Ask Cloud Architech - Contributing to Open Source Can Change Your Life - Here’s How to Do It](https://www.youtube.com/watch?v=CML6vfKjQss)
36 | - [Jack Herrington - Senior Developer Workflow For Stress-Free Coding](https://www.youtube.com/watch?v=eAfUfKYcvBo)
37 | - [Fireship - Problem-Solving for Developers - A Beginner's Guide](https://www.youtube.com/watch?v=UFc-RPbq8kg)
38 | - [Web Dev Simplified - 3 Things Great Developers Do](https://www.youtube.com/watch?v=VIfuvSTbzDc)
39 |
40 | ## Valuable tips from pros in Polish
41 |
42 | - [Jak zacząć programować? - Pierwszy dzień i zadanie juniora 👶](https://www.youtube.com/watch?v=Os20EiXRpi8)
43 | - [Mate Code - Rady od serca dla przyszłych juniorów 👼](https://www.youtube.com/watch?v=KoEGAJBWjic)
44 | - [PavelPavlow - TUTORIAL HELL (jak go uniknąć)](https://www.youtube.com/watch?v=MVwzk5gZmJQ)
45 |
46 | ## Stories from Polish programmers
47 |
48 | - [WDI 2021 - Konstanty Orzeszko - Jak straciłem 600 000 PLN w 5 lat? - O tym, jak nie przepalać pieniędzy (na głupoty) jako programista i jak nimi mądrze zarządzać](https://www.youtube.com/watch?v=mGuSdLWV1pk)
49 | - [Duży w Maluchu - ZABRALI MI MALUCHA! JAK ZARABIAĆ 2500 ZŁ DZIENNIE? \*Patologie branży IT - Ciekawy podcast o branży IT, jak tytuł sugeruje - mówi o różnych patologiach, ale też wspomina o rekrutacji, jak najwięcej zarabiać, problemy z legacy code](https://www.youtube.com/watch?v=aHffnGVK-Vs)
50 | - [W jakim wieku można zostać seniorem? Zobacz historię Jakuba Pawelskiego, który osiągnął to mając 19 lat](https://geek.justjoin.it/mlody-senior-developer)
51 |
--------------------------------------------------------------------------------
/src/pages/docs/assets/css/components.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NowYouKnowProgramming/webdev-learning-materials/0dab258dcc81f4f7f5a173df91f3a99e80bb8e46/src/pages/docs/assets/css/components.webp
--------------------------------------------------------------------------------
/src/pages/docs/assets/css/css_exercises_1_3.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NowYouKnowProgramming/webdev-learning-materials/0dab258dcc81f4f7f5a173df91f3a99e80bb8e46/src/pages/docs/assets/css/css_exercises_1_3.webp
--------------------------------------------------------------------------------
/src/pages/docs/assets/css/css_exercises_2_3.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NowYouKnowProgramming/webdev-learning-materials/0dab258dcc81f4f7f5a173df91f3a99e80bb8e46/src/pages/docs/assets/css/css_exercises_2_3.webp
--------------------------------------------------------------------------------
/src/pages/docs/assets/css/css_exercises_3_3.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NowYouKnowProgramming/webdev-learning-materials/0dab258dcc81f4f7f5a173df91f3a99e80bb8e46/src/pages/docs/assets/css/css_exercises_3_3.webp
--------------------------------------------------------------------------------
/src/pages/docs/assets/css/flex_basis_grow_shrink.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NowYouKnowProgramming/webdev-learning-materials/0dab258dcc81f4f7f5a173df91f3a99e80bb8e46/src/pages/docs/assets/css/flex_basis_grow_shrink.webp
--------------------------------------------------------------------------------
/src/pages/docs/assets/css/flex_shorthand.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NowYouKnowProgramming/webdev-learning-materials/0dab258dcc81f4f7f5a173df91f3a99e80bb8e46/src/pages/docs/assets/css/flex_shorthand.webp
--------------------------------------------------------------------------------
/src/pages/docs/assets/css/unsprinkle.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NowYouKnowProgramming/webdev-learning-materials/0dab258dcc81f4f7f5a173df91f3a99e80bb8e46/src/pages/docs/assets/css/unsprinkle.webp
--------------------------------------------------------------------------------
/src/pages/docs/assets/misc/pl_hr_response.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NowYouKnowProgramming/webdev-learning-materials/0dab258dcc81f4f7f5a173df91f3a99e80bb8e46/src/pages/docs/assets/misc/pl_hr_response.png
--------------------------------------------------------------------------------
/src/pages/docs/assets/misc/projekt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NowYouKnowProgramming/webdev-learning-materials/0dab258dcc81f4f7f5a173df91f3a99e80bb8e46/src/pages/docs/assets/misc/projekt.png
--------------------------------------------------------------------------------
/src/pages/docs/assets/react/react-fetching-1_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NowYouKnowProgramming/webdev-learning-materials/0dab258dcc81f4f7f5a173df91f3a99e80bb8e46/src/pages/docs/assets/react/react-fetching-1_3.png
--------------------------------------------------------------------------------
/src/pages/docs/assets/react/react-fetching-2_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NowYouKnowProgramming/webdev-learning-materials/0dab258dcc81f4f7f5a173df91f3a99e80bb8e46/src/pages/docs/assets/react/react-fetching-2_3.png
--------------------------------------------------------------------------------
/src/pages/docs/assets/react/react-fetching-3_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NowYouKnowProgramming/webdev-learning-materials/0dab258dcc81f4f7f5a173df91f3a99e80bb8e46/src/pages/docs/assets/react/react-fetching-3_3.png
--------------------------------------------------------------------------------
/src/pages/index.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import HeadCommon from '../components/HeadCommon.astro'
3 |
4 | import LandingPage from '../components/Redesign/LandingPage.astro'
5 | import LandingSEO from '../components/LandingPage/LandingSEO.astro'
6 | import type { Frontmatter } from '../config'
7 | import * as CONFIG from '../config'
8 | import Header from '../components/Header/Header.astro'
9 |
10 | export interface Props {
11 | frontmatter: Frontmatter
12 | canonicalUrl: URL
13 | }
14 |
15 | const frontmatter: Frontmatter = {
16 | description: '',
17 | title: 'bewebdev.tech - the best web development learning materials',
18 | layout: '',
19 | }
20 | ---
21 |
22 |
23 |
24 |
25 |
26 |
27 | {frontmatter.title ? `${frontmatter.title}` : CONFIG.SITE.title}
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/src/pages/introduction.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Web development learning materials
3 | description: Welcome to bewebdev the best place to find useful knowledge about web development
4 | layout: ../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Introduction
8 |
9 | **Greetings future devs and current alike!**
10 |
11 | Have you ever experienced frustration when browsing learning materials about web development?
12 |
13 | These docs are what you've been searching for!
14 |
15 | We've carefully picked materials from the internet and gathered useful knowledge, so nobody would lose time to browse between 10 years old outdated JQuery solutions on Stackoverflow.
16 |
17 | ## Contributing
18 |
19 | If you found something interesting, but it's not in the list, please open an issue or, even better, a pull request.
20 |
21 | 😊 We will be happy to check it out and add it.
22 |
--------------------------------------------------------------------------------
/src/pages/principles/clean_code.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Clean code
3 | description: Best practices to write easy to read and maintainable code. Write code that works on computers and humans can understand
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Free clean code courses
8 |
9 | - [Uncle Martin's (Author of Clean Code Book) Lectures](https://www.youtube.com/playlist?list=PLmmYSbUCWJ4x1GO839azG_BBw8rkh-zOj)
10 | - [Clean Code - JavaScript](https://github.com/ryanmcdermott/clean-code-javascript)
11 | - [Clean Code - TypeScript](https://github.com/labs42io/clean-code-typescript)
12 | - [Scrimba - Clean Code Tutorial](https://www.youtube.com/playlist?list=PLqYFXd9GTRVUyVv4Kw9cJAUS4vujkgvf7)
13 |
14 | ## Paid clean code courses
15 |
16 | - [Academind - Clean Code](https://pro.academind.com/p/clean-code)
17 |
18 | ## Additional content about clean code
19 |
20 | - [10 Common JavaScript Clean Code Mistakes](https://www.youtube.com/watch?v=fHJC44PESIk)
21 | - [Kent C. Dodds - AHA Programming](https://youtu.be/wuVy7rwkCfc)
22 | - [What does abstraction mean in programming?](https://stackoverflow.com/questions/21220155/what-does-abstraction-mean-in-programming)
23 | - [Demeter’s Law: Don’t talk to strangers!](https://betterprogramming.pub/demeters-law-don-t-talk-to-strangers-87bb4af11694)
24 | - [5 Javascript Clean Coding Patterns To Enhance your Code](https://medium.com/arionkoder-engineering/5-javascript-clean-coding-patterns-to-enhance-your-code-cc205d8d1ab6)
25 | - The second one does not includes the mutation. Correct one: `[...arr].sort((a, b) => a - b)`
26 | - [How to interrogate unfamiliar code (how to keep the code readable and easy to understand)](https://stackoverflow.blog/2022/08/15/how-to-interrogate-unfamiliar-code/)
27 | - [Will4_U (co-creator of bewebdev 😊) - Maintain a high quality codebase with an ease](https://will4u.vercel.app/maintain-codebase)
28 | - [Naming cheatsheet](https://github.com/kettanaito/naming-cheatsheet)
29 |
--------------------------------------------------------------------------------
/src/pages/principles/design_patterns.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Design patterns
3 | description: Using design patterns while developing can guide you into avoiding problems that many developers encountered before. Write maintainable code and learn what to use in which scenario
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Free design patterns courses
8 |
9 | - [Patterns.dev - React and JavaScript patterns](https://www.patterns.dev/)
10 | - [Mostly Adequate Guide to Functional Programming](https://github.com/MostlyAdequate/mostly-adequate-guide)
11 | - [Anjana Vakil - Learning Functional Programming with JavaScript](https://youtu.be/e-5obm1G_FY)
12 | - [Refactoring Guru - Refactoring: clean your code](https://refactoring.guru/refactoring)
13 | - [Refactoring Guru - Design Patterns](https://refactoring.guru/design-patterns)
14 | - [Alex Bespoyasov - Clean Architecture on Frontend](https://dev.to/bespoyasov/clean-architecture-on-frontend-4311)
15 | - Jack Herrington - Design Patterns with TypeScript:
16 | - [Factory Patterns](https://www.youtube.com/watch?v=-1YhP5IOBCI)
17 | - [Pub/Sub Patterns](https://www.youtube.com/watch?v=f3Cn0CGytSQ)
18 | - [Visitor and Iterator Patterns](https://www.youtube.com/watch?v=SZ2kAkMdAZE)
19 | - [Command & Memento Patterns](https://www.youtube.com/watch?v=H2kxc_ZrSPI)
20 | - [Proxy & Flyweight Patterns](https://www.youtube.com/watch?v=0vumsisnqwM)
21 |
22 | ## Paid design patterns courses
23 |
24 | - [Refactoring Guru - Dive into Design Patterns](https://refactoring.guru/design-patterns)
25 |
26 | ## Additional content about design patterns
27 |
28 | - [Fireship - 10 Design Patterns explained in 10 minutes](https://www.youtube.com/watch?v=tv-_1er1mWI)
29 | - [Continuous Delivery - Object-oriented programming (OOP) vs Functional Programming (FP)](https://www.youtube.com/watch?v=wyABTfR9UTU)
30 | - [Fireship - Object Oriented vs Functional Programming in TypeScript](https://www.youtube.com/watch?v=fsVL_xrYO0w)
31 | - [Traversy Media - 5 Design Patterns Every Engineer Should Know (with Jack Herrington)](https://www.youtube.com/watch?v=FLmBqI3IKMA)
32 | - [Fireship - Test-Driven Development // Fun TDD Introduction with JavaScript](https://www.youtube.com/watch?v=Jv2uxzhPFl4)
33 | - [Jack Herrington - Micro-Frontends in Just 10 Minutes](https://www.youtube.com/watch?v=s_Fs4AXsTnA)
34 | - [Jack Herrington - Micro-Frontends: What, why and how](https://www.youtube.com/watch?v=w58aZjACETQ)
35 | - [Organized SCSS Folder Structures for Design Systems](https://blog.prototypr.io/organized-scss-folder-structures-for-design-systems-ecb861f1522c)
36 |
37 | ## Polish materials about design patterns
38 |
39 | - [Localhost Academy - Wzorce MVC + Separation of Concerns w React - jak to wygląda i jak to zastosować w praktyce?](https://www.youtube.com/watch?v=3vs8KrNCsiQ)
40 | - [Localhost Academy - Obsługa błędów (error handling), walidacja kodu oraz dzielenie go na mniejsze części zgodnie z zasadami DRY i KISS (oglądać do 1:18:55)](https://www.youtube.com/watch?v=3VCwGdlr68M)
41 | - [Localhost Academy - Jak zadbać o strukturę folderów projektu? Jak rozbić problem na mniejsze, zrozumiałe części? Czym jest architektura i od czego ona zależy?](https://www.youtube.com/watch?v=Oycym206rTg)
42 | - [Localhost Academy - OOP w JavaScript/TypeScript - teoria i praktyka, czym jest abstrakcja i o co w niej chodzi? (jeden z trudniejszych wykładów do zrozumienia). Dodatkowo trochę o asynchroniczności i obsłudze błędów.](https://www.youtube.com/watch?v=8iXuFTO96gY)
43 | - [Localhost Academy - Uniwersalne koncepty/wzorce w programowaniu - czym jest i do czego służą te "magiczne" słowa: DRY, KISS, YAGNI, WYSIWYG, SOLID i inne takie?](https://www.youtube.com/watch?v=J2u47UQ5vC0)
44 | - [Localhost Academy - Po co się waliduje kod? W jaki sposób to robić, żeby to było dobrze zrobione?](https://www.youtube.com/watch?v=SDksgAJxUo8)
45 | - [Localhost Academy - 10 zasad w programowaniu, które warto znać. (oglądać do 1:12:29)](https://www.youtube.com/watch?v=-kRadcD5jRw)
46 | - [Przeprogramowani - Jak uczyć się wzorców projektowych na froncie? Odpowiedź dla Juniora, Mida i Seniora](https://www.youtube.com/watch?v=yiJlKWxk2jE)
47 | - [Przeprogramowani - SOLID i Open-Closed Principle w praktyce | Lepszy kod w 20 minut](https://www.youtube.com/watch?v=RWyiKjKmWPs)
48 |
--------------------------------------------------------------------------------
/src/pages/principles/design_ui_ux.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: UI and UX
3 | description: User interface and user experience relevant materials for frontend developers. Learn what you need to know about these topic as a developer
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Don't make me think - Steve Krug
8 |
9 | This book is a must read for every developer. It's a short book, but it's full of useful information. It's a book about usability a lot of examples and tips on how to make your website more usable. It's a book that will help you understand how users think and how to make your website more user friendly.
10 |
11 | ## Free courses
12 |
13 | - [Envato Tuts+ - Web Design for Beginners](https://www.youtube.com/watch?v=B-ytMSuwbf8)
14 | - [World's Shortest UI/UX course by Juxtopposed (6min)](https://www.youtube.com/watch?v=wIuVvCuiJhU)
15 |
16 | ## Color palette and theming
17 |
18 | - [Realtime colors - free tool to help you choose color palettes](https://realtimecolors.com/)
19 |
20 | ## Design rules for developers
21 |
22 | - [16 little UI design rules that make a big impact](https://www.adhamdannaway.com/blog/ui-design/16-ui-design-rules)
23 |
24 | ## Design inspirations
25 |
26 | - [Godly - find some web design inspirations](https://godly.website/)
27 | - [Dribbble - also find them here](https://dribbble.com/)
28 |
29 | ## Recreate designs
30 |
31 | - [Mizko - How to Steal Designs Like a PRO | End-to-end Process](https://www.youtube.com/watch?v=wLdWwoBDrNg)
32 |
33 | ## Design System
34 |
35 | - [Design Systems - everything about this topic](https://www.designsystems.com/)
36 |
37 | ## UI Components
38 |
39 | - [UI Components Handbook - real-world examples of UI components](https://www.uiguideline.com/components)
40 |
41 | ## Typography
42 |
43 | - [Interactive Typography Tutorial](https://www.learnui.design/tools/typography-tutorial.html)
44 |
45 | ## UX (User Experience)
46 |
47 | - [The SNEAKY psychology of loading screens - Enrico Tartarotti, YouTube](https://www.youtube.com/watch?v=g8uhdyLTAvY)
48 | - [Optimal Size and Spacing for Mobile Buttons](https://uxmovement.com/mobile/optimal-size-and-spacing-for-mobile-buttons/)
49 | - [The Digital CEO - Design tips for Front End Developers](https://youtu.be/XNJPHGWxLQA)
50 |
--------------------------------------------------------------------------------
/src/pages/principles/frontend.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Frontend development
3 | description: Everything related to frontend (framework-agnostic) - architecture, patterns, tips and tricks, etc.
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Learn about the web
8 |
9 | - [web.dev - various resources about front-end from Google itself (responsive design, accessibility, optimization, etc.)](https://web.dev/)
10 | - [Framework.dev - resources about JavaScript frameworks (books, videos, courses, podcasts), popular libraries and possibility of comparing them and more](https://www.framework.dev/)
11 |
12 | ## Rendering patterns
13 |
14 | - [Beyond Fireship - 10 Rendering Patterns for Web Apps](https://www.youtube.com/watch?v=Dkx5ydvtpCA)
15 |
16 | ## Web Performance
17 |
18 | - [Beyond Fireship - The ultimate guide to web performance](https://www.youtube.com/watch?v=0fONene3OIA)
19 | - [Beyond Fireship - Dramatically improve website speed with Partytown](https://www.youtube.com/watch?v=ZZIR1NGwy-s)
20 | - [Beyond Fireship - How to make your JavaScript Bundle Smaller](https://www.youtube.com/watch?v=kwUfeWe7DCw)
21 | - [⚡️ 💾 Web Performance Snippets - GitHub repository](https://github.com/nucliweb/webperf-snippets)
22 |
23 | ## Architecture
24 |
25 | - [Feature-sliced Design](https://feature-sliced.design/)
26 | - [Dev Agrawal - Jamstack Is Dead... Or Is It? Architecture In Depth (and differences between SSG vs SSR vs SPA)](https://www.youtube.com/watch?v=qAJhkDFODuo)
27 |
28 | ## Web Performance in Polish
29 |
30 | - [Jak zacząć programować? - Co musisz wiedzieć o wydajności stron i aplikacji?](https://www.youtube.com/watch?v=EdPVyF1-7Oc)
31 |
32 | ## Architecture in Polish
33 |
34 | - [Aleksander Patschek - Czysta architektura bez bólu głowy na frontendzie.](https://www.youtube.com/watch?v=Hq3RMXW9Hrc)
35 | - [Frontend Architecture - ARCHITEKTONICZNE ABC: STRUKTURA KATALOGÓW W PROJEKCIE](https://www.youtube.com/watch?v=GKBvTKG8irU)
36 |
37 | ## Tools
38 |
39 | - [Knip - Find unused files, dependencies and exports in your JavaScript and TypeScript projects.](https://github.com/webpro/knip)
40 | - [Fontsource - Find and install fonts in more pleasant and easier way](https://fontsource.org)
41 |
42 | ## Other content
43 |
44 | - [Josh W. Comeau - Will AI replace frontend developers?](https://www.joshwcomeau.com/blog/the-end-of-frontend-development/)
45 |
--------------------------------------------------------------------------------
/src/pages/principles/how_web_works.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: How web works
3 | description: Learn how the web works. How the browser communicates with the server, and how the server communicates with the database and other services
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | After some time working with web development, you will start to wonder how the web works. The underlying technologies that make the web possible. How the browser communicates with the server, and how the server communicates with the database and other services. On this page we are gathering resources that will help you this topic.
8 |
9 | ## General overview
10 |
11 | - [How the web works tutorial by mdn web docs](https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/How_the_Web_works)
12 | - [How the web works Academind](https://academind.com/tutorials/how-the-web-works)
13 |
14 | ## HTTP Status Codes
15 |
16 | HTTP status codes are a way to communicate with the client the status of the request. For example, if the request was successful, or if there was an error. You can find a list of all the HTTP status codes [here - MDN Docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status).
17 |
18 | Here is a [video from Web Dev Simplified](https://www.youtube.com/watch?v=wJa5CTIFj7U) that explains the HTTP status codes.
19 |
20 | A more bare bones version of list of HTTP status codes can be found [here on www.restapitutorial.com](https://www.restapitutorial.com/httpstatuscodes.html).
21 |
22 | ## Cross-Origin Resource Sharing (CORS)
23 |
24 | Explanation of CORS by Web Dev Simplified [here](https://www.youtube.com/watch?v=PNtFSVU-YTI).
25 |
--------------------------------------------------------------------------------
/src/pages/resources/_exercises/css4js.md:
--------------------------------------------------------------------------------
1 | Exercises from [CSS for JavaScript Developers](https://css-for-js.dev/) - all modules:
2 |
3 | - [Huckleberry - the basics of CSS (flow layout, box model)](https://github.com/css-for-js/huckleberry)
4 | - [Character Creator - position and overflow](https://github.com/css-for-js/character-creator)
5 | - [Mini Component Library - create your own components (progress bar, select element and search input)](https://github.com/css-for-js/mini-component-library)
6 |
7 |
8 |
9 | How these components could look like:
10 |
11 |
12 |
13 |
14 | - [Sole and Ankle - Flexbox](https://github.com/css-for-js/sole-and-ankle)
15 | - [Sole and Ankle Revisited - responsive design](https://github.com/css-for-js/sole-and-ankle-revisited)
16 | - [Unsprinkle - typography and images](https://github.com/css-for-js/unsprinkle)
17 |
18 |
19 |
20 | How this page looks like:
21 |
22 |
23 |
24 |
25 | - [New Grid Times - CSS Grid Layout](https://github.com/css-for-js/new-grid-times) - [Design for this exercise](https://www.figma.com/file/BDdNhCeVLye5mFHHxQhkgE/New-Grid-Times?node-id=0%3A1)
26 | - [Sole and Ankle Animated - animations](https://github.com/css-for-js/sole-and-ankle-animated)
27 |
--------------------------------------------------------------------------------
/src/pages/resources/_exercises/frontend_platforms.md:
--------------------------------------------------------------------------------
1 | - [Frontend Mentor](http://frontendmentor.io/)
2 | - [devChallenges](https://devchallenges.io/)
3 | - [Frontend practice](http://frontendpractice.com/)
4 | - [iCodeThis](http://icodethis.com/)
5 | - [CSSBattle](http://cssbattle.dev/)
6 | - [Codier](http://codier.io/)
7 | - [Piccalil](http://piccalil.li/)
8 | - [Daily UI Challenges](http://dailyui.co/)
9 | - [Frontloops](http://frontloops.io/)
10 | - [100 Days CSS Challenge](http://100dayscss.com/)
11 | - [CodeMentor](http://codementor.io/projects/web)
12 |
--------------------------------------------------------------------------------
/src/pages/resources/_exercises/practice_css_problems.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Practice 50+ CSS Problems from Swakpanda on twitter
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/pages/resources/_questions/advanced_questions.md:
--------------------------------------------------------------------------------
1 | - Do you know what is microfrontends?
2 | - Do you know any patterns from functional programming?
3 |
4 | - What do you think about testing, how are you doing it and what exactly you are testing?
5 | - Can you mention a few design patterns and how you can apply them?
6 | - Can you explain what is TDD, BDD and DDD? What are differences between them?
7 | - What are types of methods in REST API?
8 |
--------------------------------------------------------------------------------
/src/pages/resources/_questions/css.md:
--------------------------------------------------------------------------------
1 |
2 | Real-world CSS technical questions
3 |
4 | - What are the ways to center the container with two boxes?
5 | - What is the difference between `em` and `rem`?
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/pages/resources/_questions/javascript.md:
--------------------------------------------------------------------------------
1 |
2 | Real-world JavaScript technical questions
3 |
4 | - How this expression is called?
5 |
6 | ```js
7 | ;(function () {
8 | console.log('Hello!')
9 | })()
10 | ```
11 |
12 | - What are the differences between JavaScript and other programming languages such as C++ and PHP?
13 | - What are the key differences between `var`, `let` and `const`?
14 | - How do you handle asynchronous requests in JavaScript?
15 | - `const` vs `Object.freeze` - what are differences for arrays and objects?
16 | - Based on this code:
17 |
18 | ```js
19 | const obj = { nested: {} }
20 |
21 | const anotherObj = { ...obj }
22 |
23 | obj.nested.a = 1
24 | ```
25 |
26 | Does the `a` property will be declared also in `anotherObj` and why? If yes, how you can prevent it?
27 |
28 |
29 |
30 | - How you can iterate through the objects?
31 | - How you would describe hoisting?
32 | - How you would describe array/object mutation? It is a good practice or something to avoid?
33 | - Based on this code:
34 |
35 | ```js
36 | const result = (flag: boolean) => {
37 | return new Promise((resolve, reject) => {
38 | if (flag) {
39 | resolve('success')
40 | } else {
41 | reject('error')
42 | }
43 | })
44 | }
45 |
46 | const promise = result(true)
47 |
48 | promise
49 | .then((r) => {
50 | // 1.
51 | console.log(r)
52 |
53 | return result(false)
54 | })
55 | .catch((e) => {
56 | // 2.
57 | console.log(e)
58 |
59 | return 'fail'
60 | })
61 | .then((r) => {
62 | // 3.
63 | console.log(r)
64 |
65 | return result(true)
66 | })
67 | .catch((e) => {
68 | // 4.
69 | console.log(e)
70 | })
71 | ```
72 |
73 | What results will be displayed in console.log's and why?
74 |
75 |
76 |
77 | - Based on this code:
78 |
79 | ```js
80 | const timeoutAsync = (time) => {
81 | return new Promise((resolve) => {
82 | const timeout = setTimeout(() => {
83 | clearTimeout(timeout)
84 | resolve(`Timeout resolved after ${time} milliseconds.`)
85 | }, time)
86 | })
87 | }
88 |
89 | const timeouts = [timeoutAsync(9000), timeoutAsync(5500), timeoutAsync(1000)]
90 |
91 | // 1.
92 | timeouts.forEach(async (timeout) => {
93 | const info = await timeout
94 | console.log(info)
95 | })
96 |
97 | // 2.
98 | const timeoutsInfos = timeouts.reduce(async (promisedAcc, timeout) => {
99 | const acc = await promisedAcc
100 | const info = await timeout
101 | console.log(info)
102 | acc.push(info)
103 | return acc
104 | }, Promise.resolve([]))
105 |
106 | // 3.
107 | for await (const info of timeouts) {
108 | console.log(info)
109 | }
110 | ```
111 |
112 |
113 |
114 | What will be differences between those iterators? In which order the timeouts will be resolved and why?
115 |
116 | - What are types of storages in browser?
117 | - What will be result of `{} === {}` and why?
118 | - Based on this code:
119 |
120 | ```js
121 | const arr = [7, 1, 4, 3, 2]
122 |
123 | for (const elem of arr) {
124 | setTimeout(() => console.log(elem), elem)
125 | }
126 | ```
127 |
128 | In which order will be the logs displayed and why?
129 |
130 | - Based on this code (functional programming):
131 |
132 | ```ts
133 | import { interval, OperatorFunction } from 'rxjs'
134 | import { take, map, filter } from 'rxjs/operators'
135 |
136 | const curry: (n: number) => (num: number) => number = (n) => {
137 | return (num) => {
138 | return num * n
139 | }
140 | }
141 |
142 | const operator = (n: number): OperatorFunction => {
143 | return map((number: number) => number * n)
144 | }
145 |
146 | const increaseByOne = (n: number): number => n + 1
147 |
148 | const number$ = interval(1000).pipe(map(increaseByOne))
149 | const obser1$ = number$.pipe(take(3))
150 | const obser2$ = number$.pipe(
151 | take(4),
152 | map((n: number): string => `Hello ${'!'.repeat(n - 1)}`)
153 | )
154 | const obser3$ = number$.pipe(take(5), map(curry(2)))
155 | const obser4$ = number$.pipe(
156 | take(4),
157 | filter((n: number) => n !== 3),
158 | operator(10)
159 | )
160 |
161 | obser1$.subscribe((value: number) => {
162 | // 1.
163 | console.log(value)
164 | })
165 |
166 | obser2$.subscribe((value: string) => {
167 | // 2.
168 | console.log(value)
169 | })
170 |
171 | obser3$.subscribe((value: number) => {
172 | // 3.
173 | console.log(value)
174 | })
175 |
176 | obser4$.subscribe((value: number) => {
177 | // 4.
178 | console.log(value)
179 | })
180 | ```
181 |
182 | What values will be console.log'ed from observables and why?
183 |
184 |
185 |
186 | - How you can check that the property exists in object?
187 | - What are differences between `null` and `undefined`?
188 | - What are differences between `==` and `===`?
189 |
190 |
191 |
--------------------------------------------------------------------------------
/src/pages/resources/_questions/react.md:
--------------------------------------------------------------------------------
1 |
2 | Real-world React technical questions
3 |
4 | - What is props?
5 | - Why you have to use `className` attribute instead of `class`?
6 | - What will happen when a component in React component tree throws an error?
7 | - What are the rules of the React Hooks?
8 | - Given this following state, what is the correct way to increment the age?:
9 |
10 | ```js
11 | {
12 | id: 0,
13 | name: 'John',
14 | detailedInfo: {
15 | age: 30,
16 | address: '123 Main St',
17 | }
18 | }
19 | ```
20 |
21 |
22 |
23 | - What is React Fragment and how they work?
24 |
25 | - Given this code:
26 |
27 | ```js
28 | const names = ['John', 'Jane', 'Mary', 'Bob']
29 |
30 | function RandomName() {
31 | const [name, setName] = useState(name.at(0))
32 | const changeName = () => {
33 | const randomNameIndex = Math.floor(Math.random() * names.length)
34 | setName(names[randomNameIndex])
35 | }
36 |
37 | return (
38 |
39 |
Current name: {name}
40 |
Previous name: {prevName}
41 |
42 |
43 | )
44 | }
45 | ```
46 |
47 | - How you can store the `prevName` value, so that it holds the previous value of `name` and is displayed properly in React?
48 |
49 |
50 |
51 | - Which data structures cannot be rendered in React?
52 | - What is `React.memo` and when you should use it?
53 | - When do you use the `useCallback` hook and `React.memo`?
54 | - Which methods of class components is combined the `useEffect` hook?
55 | - What hooks do you know and explain how do you use them?
56 | - What is JSX Transform and what benefits it brings?
57 | - What is React Suspence and when you should use it?
58 | - What are the cons of using React? What are the alternatives?
59 | - How the diffing algorithm works in React (in the Virtual DOM)?
60 | - Which way you can force a component to re-render?
61 | - You want to render thousands of elements in React, but the browser is freezing.
62 | - - Why is this happening?
63 | - - How you can fix this and why it works?
64 |
65 |
66 |
--------------------------------------------------------------------------------
/src/pages/resources/_questions/typescript.md:
--------------------------------------------------------------------------------
1 |
2 | Real-world TypeScript technical questions
3 |
4 | - What are differences between `type` and `interface`?
5 | - How you can validate a data structure without using the third party validation library?
6 | - Which access modifiers allow property to be accessible only within the class?
7 | - What are differences between const numbers = [1,2,3] and const numbers = [1,2,3] as const?
8 | - How to pick key from the object type?
9 | - How to exclude key from the object type?
10 | - What are differences between those syntaxes?
11 |
12 | ```typescript
13 | type Test = {
14 | a: string | undefined
15 | b?: string
16 | }
17 | ```
18 |
19 |
20 |
21 | - Name utility types that you know and explain what they do.
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/pages/resources/build_your_project.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Project ideas and planning
3 | description: Do you want to build your own project but don't know where to start? List of project ideas and resources that will help you in deciding what to build next
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Project ideas
8 |
9 | - [Awesome Codebases - check out the codebases worth exploring](https://github.com/alan2207/awesome-codebases)
10 | - [8 beginner-friendly projects to create (the original title is a exaggeration, but they're fine when starting to learn front-end)](https://dev.to/madza/8-projects-to-build-to-master-your-front-end-skills-4gnc)
11 | - [7 Websites To Find Front End Projects For Your Portfolio](https://dev.to/moeminm/where-to-find-front-end-challenges-for-your-portfolio-23f0)
12 | - [Scrimba - 10 fantastic programming project ideas for your portfolio (and where to find more)](https://youtu.be/DhER-6qkwIQ)
13 | - [Real Tough Candy - Project Ideas for Web Developers](https://github.com/RealToughCandy/project-ideas-for-web-developers)
14 | - [Josh tries coding - 3 Advanced React Project Ideas You Can Build Solo](https://www.youtube.com/watch?v=YwtdLoC9GkM)
15 |
16 | ## How to plan a project
17 |
18 |
19 |
20 | How to approach to building (AI) side-projects?
21 |
22 |
23 |
24 |
25 | [Source](https://twitter.com/nutlope/status/1696534532709872072)
26 |
27 |
28 |
29 | - [TomDoesTech - What Does Senior Developer Use to Build Side Projects?](https://www.youtube.com/watch?v=bKliDUwRI_Q)
30 | - [Web Dev Simplified - You Will Never Finish Your Project If You Keep Doing This](https://www.youtube.com/watch?v=yB7nFf0Vug8)
31 | - [Web Dev Simplified - This One Technique Is How I Build Projects Without Getting Stuck](https://www.youtube.com/watch?v=Qvmp4F-hOKA)
32 | - [Web Dev Simplified - Do This Before You Start Your Next Large Project](https://www.youtube.com/watch?v=xHIiW6P1NbE)
33 | - [Project Guidelines (to make your project easier to develop)](https://github.com/elsewhencode/project-guidelines)
34 | - [Peter Lunch - How to Plan and Build a Programming Project - A Legitimate Guide for Beginners](https://www.peterlunch.com/blog/how-to-plan-and-build-a-programming-project)
35 |
36 | ### How to plan a project in Polish
37 |
38 | - [Localhost Academy - Jak planować zbudowanie projektu, aby się nie zgubić i wiedzieć, co robić dalej?](https://www.youtube.com/watch?v=wNO1hL6v0Ng)
39 | - - [Notatki z tego wykładu](https://regal-vertebra-c76.notion.site/2020-08-06-Burza-m-zg-w-odno-nie-nowej-aplikacji-XNotes-w-metodyce-BDD-2020-09-16-Om-wienie-p-020d6c12e6fc4f1a9bd7781fdb26883d)
40 |
41 |
42 |
43 | W jaki sposób podejść do tworzenia projektu? Interesujący komentarz z grupy na FB
44 |
45 |
46 | 
47 |
48 |
49 |
50 | ## Code review tips
51 |
52 | ### Code review pyramid
53 |
54 | - 
55 |
56 | ## Other materials
57 |
58 | - [Keys to a well written README](https://medium.com/chingu/keys-to-a-well-written-readme-55c53d34fe6d)
59 |
--------------------------------------------------------------------------------
/src/pages/resources/complete_project.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Build a complete project
3 | description: Learn how to build your own project from scratch. Step by step tutorials on how to build complete apps. T3 Stack, Fullstack apps, React apps and more
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Complete project tutorials
8 |
9 | ### For starters
10 |
11 | #### HTML & CSS
12 |
13 | - [Kevin Powell - Build a responsive website with HTML & CSS series](https://www.youtube.com/playlist?list=PL4-IK0AVhVjNDRHoXGort7sDWcna8cGPA)
14 |
15 | #### JavaScript
16 |
17 | - [Web Dev Simplified - Flappy Bird Clone](https://www.youtube.com/watch?v=Jgst0rihJ3o)
18 | - [Web Dev Simplified - Pong Clone](https://www.youtube.com/watch?v=PeY6lXPrPaA)
19 | - [Web Dev Simplified - Chrome Dino Clone](https://www.youtube.com/watch?v=47eXVRJKdkU)
20 | - [Web Dev Simplified - Wordle Clone](https://www.youtube.com/watch?v=Wak7iN4JZzU)
21 | - [Web Dev Simplified - 2048 Clone](https://www.youtube.com/watch?v=wOVEe9eawXc)
22 | - [Web Dev Simplified - Calculator App](https://www.youtube.com/watch?v=DgRrrOt0Vr8)
23 | - [Web Dev Simplified - Budget App](https://www.youtube.com/watch?v=yz8x71BiGXg)
24 | - [Web Dev Simplified - TypeScript TODO List](https://www.youtube.com/watch?v=jBmrduvKl5w)
25 |
26 | ### More advanced
27 |
28 | - [Web Dev Simplified - How To Create An Advanced Shopping Cart With React and TypeScript](https://www.youtube.com/watch?v=lATafp15HWA)
29 | - [Web Dev Simplified - How To Create A Password Protected File Sharing Site With Node.js, MongoDB, and Express.js](https://www.youtube.com/watch?v=AHXFMu8xVsc)
30 | - [Web Dev Simplified - The Perfect Advanced React/TypeScript Project - Markdown Supported Note Taking With Categories](https://www.youtube.com/watch?v=j898RGRw0b4)
31 |
32 | ### Can be complex
33 |
34 | - [Web Dev Simplified - How To Create A Social Media App Using The T3 Stack - Next.js, React, Tailwind, Prisma, TypeScript](https://www.youtube.com/watch?v=jqVm5_G1ZEE)
35 | - [TomDoesTech - Build a Blog with the T3 Stack (TypeScript, Next.js, tRPC, Prisma and more!)](https://www.youtube.com/watch?v=syEWlxVFUrY)
36 | - [Ben Awad - Fullstack Reddit Clone (TypeScript, React, GraphQL, Node.js, Postgres and more!)](https://www.youtube.com/watch?v=I6ypD7qv3Z8)
37 | - [How to build a real-time Auction System with Socket.io and React.js](https://dev.to/novu/how-to-build-a-real-time-auction-system-with-socketio-and-reactjs-3ble)
38 | - [Josh tries coding - Build and Deploy a Full Stack Realtime Chat Messaging App with NextJS 13](https://www.youtube.com/watch?v=NlXfg5Pxxh8)
39 |
40 | ### In Polish
41 |
42 | - [Jak zacząć programować? - Tutorial HTML, CSS i JavaScript, ale bez ściemy](https://www.youtube.com/watch?v=lfQmsYCDci8)
43 | - Mate Code - Zadanie dla Junior Frontend Developera - odtworzenie sklepu internetowego
44 | [Część 1](https://www.youtube.com/watch?v=RXnj77CF9iY)
45 | [Część 2](https://www.youtube.com/watch?v=V0SrIkH-NRU)
46 |
--------------------------------------------------------------------------------
/src/pages/resources/content_creators.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Content creators and websites
3 | description: Best sources to seek further knowledge, videos you might want to watch, technical blogs, podcasts and websites
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## English
8 |
9 | ### YouTube
10 |
11 | - [Fireship (News)](https://www.youtube.com/c/Fireship)
12 | - [uidotdev (JS/React)](https://www.youtube.com/c/uidotdev/)
13 | - [Kevin Powell (HTML/CSS/JS)](https://www.youtube.com/kepowob)
14 | - [Matt Pocock (TypeScript)](https://www.youtube.com/channel/UCswG6FSbgZjbWtdf_hMLaow)
15 | - [DesignCode (Figma/React)](https://www.youtube.com/c/DesignCodeTeam)
16 | - [Web Dev Cody (JS/React)](https://www.youtube.com/@WebDevCody/)
17 | - [Jack Herrington (JS/React)](https://www.youtube.com/c/JackHerrington)
18 | - [TomDoesTech (JS/React)](https://www.youtube.com/c/TomDoesTech)
19 | - [Code 2020 (VSCode/JS)](https://www.youtube.com/c/Code2020/videos)
20 |
21 | ### Blogs and websites
22 |
23 | - [Kent C. Dodds (JS/React)](https://kentcdodds.com/blog)
24 | - [Josh W. Comeau (CSS/JS)](https://www.joshwcomeau.com/)
25 | - [Oak Harbor Web Designs (builds real-world HTML/CSS/JS websites)](https://www.youtube.com/channel/UC6YEjppZo4Ep-8N54_nXFQg)
26 | - [Nadia Makarevich - Developer Way Blog (advanced React + TypeScript topics)](https://developerway.com/)
27 | - [React Round Up](https://topenddevs.com/podcasts/react-round-up)
28 | - [The React Show](https://www.thereactshow.com/)
29 |
30 | ### Podcasts
31 |
32 | - [Front End Happy Hour](https://open.spotify.com/show/0Giuw6eNbTzP9CDZODDrA2?si=0bc2ad2c0cb24319)
33 | - [The Scrimba Podcast](https://open.spotify.com/show/1oJamVudy2v3oSJTejUyus?si=8140359b1b7f4927)
34 | - [Syntax - Tasty Web Development Treats](https://open.spotify.com/show/4kYCRYJ3yK5DQbP5tbfZby?si=6f7fb75508f4482a)
35 |
36 | ### Twitter / X accounts to follow
37 |
38 | - [Matt Pocock](https://twitter.com/mattpocockuk)
39 | - [Cory House](https://twitter.com/housecor)
40 | - [Web Dev Cody](https://twitter.com/webdevcody)
41 |
42 | ## Polish
43 |
44 | ### Polish YouTube channels
45 |
46 | - [Jak zacząć programować? (HTML/CSS/JS)](https://www.youtube.com/c/Jakzacz%C4%85%C4%87programowa%C4%87)
47 | - [Przeprogramowani (JavaScript i nie tylko)](https://www.youtube.com/c/Przeprogramowani)
48 |
49 | ### Podcasts in Polish
50 |
51 | - [Better Software Design - Mateusz Gil](https://open.spotify.com/show/0QCDOJNUWnJkaq73FasfkY?si=5e2eb79aeda64cd2)
52 | - [Na Podsłuchu - Niebezpiecznik.pl (Cyberbezpieczeństwo)](https://open.spotify.com/show/5MxNt9v6eCH4xxSFqRY1oS?si=99f81ac0867a47e7)
53 |
--------------------------------------------------------------------------------
/src/pages/resources/other_resources.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Other resources
3 | description: Valuable materials that you should check out
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Valuable content
8 |
9 | - [Atlassian - What is Agile?](https://www.atlassian.com/agile)
10 | - [Regex 101](https://regexlearn.com/learn/regex101)
11 |
12 | ## Valuable videos
13 |
14 | - [Fireship - Session vs Token Authentication in 100 seconds](https://www.youtube.com/watch?v=UBUNrFtufWo)
15 | - [Fireship - 100+ Computer Science Concepts Explained](https://www.youtube.com/watch?v=-uleG_Vecis)
16 | - [Web Dev Cody - What does larger scale software development look like?](https://www.youtube.com/watch?v=Dl-BdxNRUqs)
17 | - [Travis Media - 10 Udemy Courses Every Developer SHOULD Own (NOT just coding)](https://www.youtube.com/watch?v=hexfXc7-SsU)
18 |
--------------------------------------------------------------------------------
/src/pages/resources/test_your_skills.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Test your skills
3 | description: The best way to cement your skill is to test your knowledge in practice. Here you can find maetrials about testing your newly acquired knowledge
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Platforms for testing your skills
8 |
9 | import Platforms from '../resources/_exercises/frontend_platforms.md'
10 |
11 |
12 |
13 | ## Mocked interview
14 |
15 | - [Conner Ardman - React Coding Interview Ft. Clément Mihailescu (build the wordle clone)](https://www.youtube.com/watch?v=5xf4_Kx7azg)
16 | - - [Used API URL (if someone wants to recreate the task)](https://api.frontendexpert.io/api/fe/wordle-words)
17 |
18 | ## Mocked interview in Polish
19 |
20 | - [Jak zacząć programować? - Junior frontend developer - rozmowa o pracę!](https://www.youtube.com/watch?v=g3VKD_voy0g)
21 | - [Jak zacząć programować? - Regular / Mid front-end developer - rozmowa o pracę!](https://www.youtube.com/watch?v=ecsxxHqeczg)
22 | - [Jak zacząć programować? - Kolejna rozmowa rekrutacyjna! Mid / Regular JavaScript developer](https://www.youtube.com/watch?v=kBO0MQ_pfSk)
23 |
24 | ## HTML & CSS
25 |
26 | import CSS4JSExercises from './_exercises/css4js.md'
27 | import PracticeCSSProblems from './_exercises/practice_css_problems.md'
28 | import CSSQuestions from './_questions/css.md'
29 |
30 | - [Frontend Practice - Recreate the existing pages](https://www.frontendpractice.com/)
31 | - [Chris Hansen - Master Frontend Development 💻 By Cloning These Websites 💯](https://www.dev.to/hyggedev/master-frontend-development-by-cloning-these-websites-1m08)
32 | - [25 Extremely Modern Layouts Using CSS Grid✨ (try to recreate them!)](https://dev.to/preethi_dev/25-extremely-modern-layouts-using-css-grid-10ek)
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 | ## JavaScript
41 |
42 | - [Lydia Hallie - JavaScript Questions with answers](https://github.com/lydiahallie/javascript-questions)
43 | - [BFE.dev - prepare for Front-End job interviews](https://bigfrontend.dev/)
44 | - [Wes Bos - JavaScript 30 - build 30 small projects/apps](https://javascript30.com/)
45 | - [JavaScript interview questions - List of ~ 400 questions on GitHub](https://github.com/sudheerj/javascript-interview-questions)
46 |
47 | import JavaScriptQuestions from './_questions/javascript.md'
48 |
49 |
50 |
51 | ## TypeScript
52 |
53 | import TypeScriptQuestions from './_questions/typescript.md'
54 |
55 |
56 |
57 | ## React
58 |
59 | import ReactQuestions from './_questions/react.md'
60 |
61 | - [Web Dev Cody - The most challenging React problem on my channel](https://www.youtube.com/watch?v=5wdVBpLh-Y4)
62 | - [Josh tries coding - 5 Amazing Open-Source React Projects to Learn From](https://www.youtube.com/watch?v=RvyCAdDmFaw)
63 |
64 |
65 |
66 | ## Advanced questions
67 |
68 | import AdvancedQuestions from './_questions/advanced_questions.md'
69 |
70 |
71 |
72 | ## HTML & CSS & JavaScript
73 |
74 | - [Florin Pop - App Ideas (from Beginners to Advanced)](https://github.com/florinpop17/app-ideas)
75 | - [Frontend Mentor - improve your front-end skills by building different projects](https://www.frontendmentor.io/)
76 | - [30 seconds of interviews - HTML, CSS, JavaScript, React, Node and Security questions & answers](https://30secondsofinterviews.org/)
77 | - 🇵🇱 [Localhost Academy - Zbiór zadań HTML, CSS, JS, React, itp.](https://github.com/Przemocny/zbior-zadan-html-css-js-react)
78 |
79 | ## Technical exercises
80 |
81 | import RecruitmentTasks from './_questions/recruitment_tasks.md'
82 |
83 |
84 |
--------------------------------------------------------------------------------
/src/pages/software/development_setup.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Development setup
3 | description: Learn how to setup your development environment. How to install the necessary software, and how to configure it to work with your projects
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## How to setup your development environment on a new Mac machine
8 |
9 | How to keep your Windows productivity when switching to Mac
10 |
11 | - [Overment - Apps](https://brain.overment.com/Tools/Apps.html)
12 | - [Mac keyboard shortcuts](https://support.apple.com/en-us/HT201236)
13 | - [What’s it called on my Mac](https://support.apple.com/guide/mac-help/whats-it-called-on-my-mac-cpmh0038/mac)
14 | - [Mac Setup for Web Development - ROBIN WIERUCH](https://www.robinwieruch.de/mac-setup-web-development/)
15 | - [Macmostvideo - Great youtube channel for Mac tips and tricks](https://www.youtube.com/@macmost)
16 |
--------------------------------------------------------------------------------
/src/pages/software/other_tools.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Other tools
3 | description: Tools that can help programmers. Take notes, organize your bookmarks and more
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## CSS
8 |
9 | - [animista.net - Cool genarator for CSS animations](https://animista.net/)
10 | - [easings.net - Easing functions for CSS animations](https://easings.net/)
11 | - [ui.glass - Glass ui generator](https://ui.glass/generator/)
12 |
13 | ## JavaScript
14 |
15 | - [toptal.com - Generate key codes with a key press](https://www.toptal.com/developers/keycode)
16 |
17 | ## Productivity
18 |
19 | - [Raindrop.io - manage your bookmarks way easier than you think](https://raindrop.io/)
20 |
21 | ## Diagrams
22 |
23 | - [Drawio - free app for diagrams](https://drawio-app.com/)
24 | - [Excalidraw - draw diagrams by hand fast](https://excalidraw.com/)
25 | - [Lucidchart - intelligent diagramming application](https://www.lucidchart.com/pages)
26 |
27 | ## Screenshots
28 |
29 | - [Greenshot - cool tool to make screenshot and measure pixels like on MacOS](https://getgreenshot.org/)
30 |
31 | ## Search engines
32 |
33 | - [You.com - interesting alternative to Google, which suggests code snippets, Stack Overflow answers or even YouTube videos](https://you.com/)
34 |
35 | ## Image services
36 |
37 | - [Unsplash - free for use images](https://unsplash.com/)
38 |
--------------------------------------------------------------------------------
/src/pages/software/repository_tools.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Repository tools
3 | description: Tools for git repos. Readme generators, icons for your readme, and more
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | Ir's important to have a good readme for your project it helps you stand out from the crowd, not only on GitHub, but also when you are applying for a job. You can use these tools to generate readme for your project, or to add some cool icons to your readme.
8 |
9 | ## Readme tools
10 |
11 | You can use these tools to generate readme for your project, or to add some cool icons to your readme. It's a good idea to have a readme for your project, because it can help other people to understand what your project is about, and how to use it.
12 |
13 | ### Readme generators
14 |
15 | - [Readme.so - generate readme for your project](https://readme.so/)
16 |
17 | ### Banners
18 |
19 | - [Stackoverflow banner](https://github.com/johannchopin/stackoverflow-readme-profile#stackoverflow-readme-profile)
20 |
21 | ### Icons
22 |
23 | - [Skill icons](https://github.com/tandpfun/skill-icons#readme)
24 | - [Minimalistic badges and banners](https://github.com/alexandresanlim/Badges4-README.md-Profile#welcome-badges-4-readmemd-profile)
25 |
--------------------------------------------------------------------------------
/src/pages/software/vim.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Vim
3 | description: Materials about famous, open-source, multi platform code editor
4 | layout: ../../layouts/MainLayout.astro
5 | ---
6 |
7 | ## Tutorials
8 |
9 | - [Fireship - Vim in 100 seconds (and beyond)](https://www.youtube.com/watch?v=-txKSRn0qeA)
10 | - [FreeCodeCamp - Vim Tutorial for Beginners](https://www.youtube.com/watch?v=RZ4p-saaQkc)
11 | - [Vim exercises to download - Learn Vim in practice](https://github.com/skilldrick/vim-exercises/blob/master/vim_ex.txt)
12 |
13 | ## Polish tutorials for Vim
14 |
15 | - [Poznajemy VIM. Skuteczny trening - Pasja informatyki](https://youtu.be/U0gJxqyolyU)
16 |
17 | ## Extensions for Vscode
18 |
19 | - [Vim emulator for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=vscodevim.vim)
20 | - [Learn Vim - full Vim tutorial inside Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=vintharas.learn-vim)
21 | - [Vim Cheatsheet](https://marketplace.visualstudio.com/items?itemName=AndenetAlexander.vim-cheatsheet)
22 |
23 | ## Think in Vim
24 |
25 | - [Learning Vim in a week - YouTube](https://youtu.be/_NUO4JEtkDw)
26 | - [Mastering the Vim Language - YouTube](https://youtu.be/wlR5gYd6um0)
27 |
28 | ## Remap CAPSLOCK key to ESCAPE
29 |
30 | It's popular among Vim users to remap CAPSLOCK key as ESCAPE because ESC is used to escape INSERT mode in Vim.
31 |
32 | ### AutoHotkey script
33 |
34 | On Windows you can remap that using AutoHotkey script.
35 |
36 | You can learn more about AutoHotkey [here](https://www.autohotkey.com/).
37 |
38 | ```autohotkey
39 | ;this script will remap CapsLock to Esc only inside Visual Studio Code
40 | #if WinActive("ahk_exe Code.exe")
41 | CapsLock::ESC
42 | #if
43 | ```
44 |
--------------------------------------------------------------------------------
/src/pages/technologies/git.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Git materials
3 | description: Useful materials about git. Learn what you need to know about git. Write good commit messages, git workflow, necessary commands for git
4 | layout: ../../layouts/MainLayout.astro
5 | image: { src: /metaimages/git.png, alt: 'git' }
6 | ---
7 |
8 | ## Free content
9 |
10 | - [How to be a git expert](https://youtu.be/hZS96dwKvt0)
11 | - [BitBucket - Learn Git](https://www.atlassian.com/git/tutorials)
12 | - [TomDoesTech - Learn Just Enough Git to be Productive](https://www.youtube.com/watch?v=wx3ultvbzUY)
13 | - [How to learn Git slowly.](https://dev.to/samuelfaure/how-to-learn-git-slowly-38fa)
14 | - [Oh My Git! Game about learning Git](https://ohmygit.org/)
15 |
16 | ### Free content in Polish
17 |
18 | - [Overment - Kurs Git po polsku od podstaw](https://www.youtube.com/playlist?list=PLjHmWifVUNMKIGHmaGPVqSD-L6i1Zw-MH)
19 |
20 | ## Additional content
21 |
22 | ### Write good commit messages
23 |
24 | - [Write Git Commit Messages That Your Colleagues Will Love](https://dev.to/simeg/write-git-commit-messages-that-your-colleagues-will-love-1757)
25 | - [Conventional Commits - add a type of your commit to your messages](https://www.conventionalcommits.org/en/v1.0.0/)
26 | - [Please Start Writing Better Git Commits](https://tawdev.hashnode.dev/please-start-writing-better-git-commits)
27 |
28 | #### Polish materials for writing good commit messages
29 |
30 | - [Conventional Commits czyli jak tworzyć epickie commity w git](https://highlab.pl/conventional-commits/)
31 |
32 | ### Workflow with git
33 |
34 | - [Fireship - 13 Advanced (but useful) Git Techniques and Shortcuts](https://www.youtube.com/watch?v=ecK3EnyGD8o)
35 | - [Annie Sexton - Git Organized: A Better Git Flow](https://dev.to/render/git-organized-a-better-git-flow-56go)
36 | - [BenjO - Organize your development to avoid big pull requests](https://medium.com/swile-engineering/organize-your-development-to-avoid-big-pull-requests-a3f1ba69ca7f)
37 |
38 | ### Quick tips for Git
39 |
40 | - [How to Update a Fork in Git - medium](https://medium.com/@sahoosunilkumar/how-to-update-a-fork-in-git-95a7daadc14e)
41 | - [Turn around your Git mistakes in 17 ways - quick fixes for common mistakes](https://dev.to/smitterhane/turn-around-your-git-mistakes-in-17-ways-2mn1)
42 | - [How to remove commits from a pull request - stackoverflow](https://stackoverflow.com/questions/36168839/how-to-remove-commits-from-a-pull-request)
43 | - [Delete branches that have been merged - stackoverflow](https://stackoverflow.com/questions/6127328/how-do-i-delete-all-git-branches-which-have-been-merged/6127884#6127884)
44 |
45 | ### Other
46 |
47 | - [List of git commands for different situations](https://ohshitgit.com/)
48 | - [Undo wrong Git changes](https://dev.to/dailydevtips1/undo-wrong-git-changes-32mc)
49 |
--------------------------------------------------------------------------------
/src/pages/technologies/html.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: HTML
3 | description: Useful materials about HTML. Free HTML courses, and must know facts
4 | layout: ../../layouts/MainLayout.astro
5 | image: { src: /metaimages/html.png, alt: 'html' }
6 | ---
7 |
8 | ## Free courses
9 |
10 | - [Codecademy - Learn HTML](https://www.codecademy.com/learn/learn-html)
11 | - [Minim - HTML for Absolute Beginners](https://www.youtube.com/playlist?list=PL4cTxE4s2XIYJL6uPQUwMt25M70gPl-O6)
12 | - [MDN - Learn HTML](https://developer.mozilla.org/en-US/docs/Learn/HTML)
13 |
14 | ### Free courses in Polish
15 |
16 | - [Jak zacząć programować? - Podstawy HTML + CSS w dwie godziny - kurs krok po kroku!](https://www.youtube.com/watch?v=opNgrPv3Qw8)
17 |
18 | ## HTML elements
19 |
20 | - [Web Dev Simplified - The New dialog HTML Element Changes Modals Forever](https://www.youtube.com/watch?v=ywtkJkxJsdg)
21 | - [Minim - When to Use Semantic HTML Elements Instead of Divs (part of the HTML for Absolute Beginners series)](https://www.youtube.com/watch?v=ZThq93Yuwd0)
22 | - [Web Dev Simplified - 5+ Must Know HTML Tags That Almost Nobody Knows](https://www.youtube.com/watch?v=iX_QyjdctsQ)
23 | - [HTML Reference - It features all elements and attributes](https://htmlreference.io/)
24 |
25 | ## Best practices
26 |
27 | - [11 HTML best practices for login & sign-up forms](https://evilmartians.com/chronicles/html-best-practices-for-login-and-signup-forms)
28 |
29 | ## Images
30 |
31 | - [Web Dev Simplified - How To Load Images Like A Pro](https://www.youtube.com/watch?v=hJ7Rg1821Q0)
32 |
33 |
34 | Be careful when using loading="lazy"
35 |
36 |
37 | [Source](https://www.linkedin.com/posts/adrian-po%C5%82ubi%C5%84ski-281ab2172_loading-thumbnail-img-activity-7087325194410692608-VQqS?utm_source=share&utm_medium=member_desktop)
38 |
39 |
40 |
41 | ## Additional content
42 |
43 | ### Additional content in Polish
44 |
45 | - [Bartosz Zagrodzki - Do you know all input types?](https://www.zagrodzki.me/blog/do-you-know-all-input-types)
46 |
--------------------------------------------------------------------------------
/src/pages/technologies/nextjs.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Next.js
3 | description: Useful materials about Next.js, how to migrate from CRA? Free and paid Next.js courses
4 | layout: ../../layouts/MainLayout.astro
5 | image: { src: /metaimages/nextjs.png, alt: 'nextjs' }
6 | ---
7 |
8 | ## Free
9 |
10 | - [Next.js docs](https://nextjs.org/docs)
11 | - [Web Dev Simplified - Learn Next 13 in 30 Minutes](https://www.youtube.com/watch?v=NgayZAuTgwM)
12 | - [Josh tries coding - Master NextJS 13: Build and Deploy a Modern Full-Stack App in Just 5 Hours!](https://www.youtube.com/watch?v=4lUkSgvmTYM)
13 |
14 | ## Paid
15 |
16 | - [Academind - Next.js & React - The Complete Guide (incl. Two Paths!)](https://www.udemy.com/share/104cpi3@Oh4oUEJs8F2B6c3t54xvmnsosIt7uQiy_K1OtotWexANxEsNy_pYzliqECIW0dgGgg==/)
17 |
18 | ## Additional content
19 |
20 | - [Web Dev Cody - Keep your next.js routes cleaner by grouping them](https://www.youtube.com/shorts/YCovzYOoVJA)
21 | - [Migrating from create react app](https://nextjs.org/docs/migrating/from-create-react-app)
22 | - [FAQ](https://nextjs.org/docs/faq)
23 | - [uidotdev - The Story of Next.js](https://www.youtube.com/watch?v=BILxV_vrZO0)
24 | - [Josh tries coding - This Open-Source NextJS Project is a Game-Changer (perfect to learning)](https://www.youtube.com/watch?v=elvwguckWjQ)
25 |
26 | ### Rendering in NextJs
27 |
28 | - [What is Rendering? - Docs](https://nextjs.org/learn/foundations/how-nextjs-works/rendering)
29 | - [SSR vs. SSG vs. ISR vs. CSR - YouTube](https://www.youtube.com/watch?v=mWytwmxLKmo)
30 |
--------------------------------------------------------------------------------
/src/pages/technologies/nodejs.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Node.js
3 | description: All materials to learn about Node.js
4 | layout: ../../layouts/MainLayout.astro
5 | image: { src: /metaimages/nodejs.png, alt: 'nodejs' }
6 | ---
7 |
8 | Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient.
9 |
10 | ## Start learning
11 |
12 | - [Node.js official documentation](https://nodejs.org/en/docs/guides/)
13 |
14 | ## More on Node.js
15 |
16 | - [Full Node.js Reference](https://nodejs.org/dist/latest/docs/api/)
17 |
18 | ## How Node.js works?
19 |
20 | - [Node.js Event Loop](https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/)
21 | - [Blocking and non-blocking code](https://nodejs.org/en/docs/guides/dont-block-the-event-loop/)
22 | - [Node.js runtime](https://github.com/samerbuna/efficient-node/blob/main/100-learning-node-runtime.adoc)
23 |
24 | ## Debugging
25 |
26 | - [Debugging Node.js](https://nodejs.org/en/docs/guides/debugging-getting-started/)
27 | - [Debugging with VS Code](https://code.visualstudio.com/docs/nodejs/nodejs-debugging)
28 |
29 | ## Node.js frameworks
30 |
31 | - [Express.js - tutorial](https://expressjs.com/en/starter/installing.html)
32 |
33 | ## Important patterns and concepts
34 |
35 | - [Node.js Best Practices (2023 Version)](https://github.com/goldbergyoni/nodebestpractices)
36 | - [Model View Controller - MDN Docs](https://developer.mozilla.org/en-US/docs/Glossary/MVC)
37 |
38 | ## Free
39 |
40 | ### Jak zacząć programować? - mini-seria o Node.js i Express.js
41 |
42 | - [Jak zacząć programować? - Backend - Podstawy w Node.js i Express](https://www.youtube.com/watch?v=Oc9hbOL0_nk)
43 | - [Jak zacząć programować? - Backend w Node.js - PATCH, DELETE. Darmowy hosting na Heroku i Github pages](https://www.youtube.com/watch?v=TCjpRrIpZQ4)
44 |
45 | ## Paid
46 |
47 | - [Academind Node.js - The complete guide](https://www.udemy.com/share/101r4c3@fzxkOw8rhEO62wBNcgkMA_OXRXPbo9dbb3SY5Lp3K180ReyZAlYKV0t4pCNwb1KKuA==/)
48 |
49 | ## Additional content
50 |
51 | - [Node.js Best Practices](https://github.com/goldbergyoni/nodebestpractices)
52 | - [How to monitor a Node.js application](https://newrelic.com/blog/best-practices/nodejs-application-monitoring?utm_source=javascript-weekly&utm_medium=community&utm_campaign=global-fy23-q2-nodejs-application-monitoring)
53 |
--------------------------------------------------------------------------------
/src/pages/technologies/redux.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Redux
3 | description: Redux learning materials. Redux toolkit, Redux with TypeScript and more!
4 | layout: ../../layouts/MainLayout.astro
5 | image: { src: /metaimages/redux.png, alt: 'redux' }
6 | ---
7 |
8 | ## Free
9 |
10 | - [Redux Toolkit Documentation](https://redux-toolkit.js.org/introduction/getting-started)
11 | - [Jack Herrington - Redux Toolkit with TypeScript](https://www.youtube.com/watch?v=eFh2Kr9hfyo)
12 | - [Learn With Jason - Let’s Learn Modern Redux! (with Mark Erikson [one of the Redux's main contributor])](https://www.youtube.com/watch?v=9zySeP5vH9c)
13 | - [Dave Gray - Redux Toolkit Tutorials Playlist](https://www.youtube.com/playlist?list=PL0Zuz27SZ-6M1J5I1w2-uZx36Qp6qhjKo)
14 |
15 | ## Additional content
16 |
17 | - [Jack Herrington - Fixing Redux/Zustand Re-renders](https://www.youtube.com/watch?v=aOt4Hz3ze3Q)
18 | - [Matt Pocock - Should you still be using Redux in 2023?](https://www.youtube.com/watch?v=czptRA4IeCc)
19 |
--------------------------------------------------------------------------------
/src/styles/themes/tailwind.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | @layer base {
6 | :root {
7 | --color-text-base: 255, 255, 255;
8 | --color-text-muted: 176, 171, 177;
9 | --color-text-inverted: 20, 7, 26;
10 | --color-link: 190, 190, 255;
11 | --color-bg-base: 20, 7, 26;
12 | --color-bg-elevated: 88, 37, 112;
13 | --color-accent-primary: 237, 189, 66;
14 | --color-accent-secondary: 58, 12, 164;
15 | --color-gradient-start: 236, 65, 99;
16 | --color-gradient-end: 168, 36, 181;
17 | --color-backdrop: 80, 80, 80;
18 | }
19 |
20 | .theme-light {
21 | --color-text-base: 0, 0, 0;
22 | --color-text-muted: 50, 50, 50;
23 | --color-text-inverted: 255, 255, 255;
24 | --color-link: 0, 0, 190;
25 | --color-bg-base: 255, 255, 255;
26 | --color-bg-elevated: 200, 200, 200;
27 | --color-accent-primary: 198, 86, 253;
28 | --color-accent-secondary: 98, 52, 214;
29 | --color-gradient-start: 236, 65, 99;
30 | --color-gradient-end: 168, 36, 181;
31 | --color-backdrop: 0, 0, 0;
32 | }
33 |
34 | .theme-oled {
35 | --color-text-base: 255, 255, 255;
36 | --color-text-muted: 190, 190, 190;
37 | --color-text-inverted: 0, 0, 0;
38 | --color-link: 190, 90, 255;
39 | --color-bg-base: 0, 0, 0;
40 | --color-bg-elevated: 30, 30, 30;
41 | --color-accent-primary: 237, 189, 66;
42 | --color-accent-secondary: 58, 12, 164;
43 | --color-gradient-start: 236, 65, 99;
44 | --color-gradient-end: 168, 36, 181;
45 | --color-backdrop: 40, 40, 40;
46 | }
47 | }
48 |
49 | .gradient-text {
50 | background-image: linear-gradient(
51 | to right,
52 | rgb(var(--color-gradient-start)),
53 | rgb(var(--color-gradient-end))
54 | );
55 | background-clip: text;
56 | -webkit-text-fill-color: transparent;
57 | }
58 |
59 | body {
60 | color: rgb(var(--color-text-base));
61 | }
62 |
63 | *::-webkit-scrollbar {
64 | width: 5px;
65 | height: 5px;
66 | }
67 |
68 | *::-webkit-scrollbar-track {
69 | background: transparent;
70 | border-radius: 5px;
71 | }
72 |
73 | *::-webkit-scrollbar-thumb {
74 | background-color: rgb(var(--color-text-muted));
75 | border-radius: 5px;
76 | }
77 |
78 | @media (prefers-reduced-motion: no-preference) {
79 | * {
80 | scroll-behavior: smooth;
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/src/utils/addPluralFormEnding.ts:
--------------------------------------------------------------------------------
1 | export const addPluralFormEnding = (number: number) => (number > 1 ? 's' : '')
2 |
--------------------------------------------------------------------------------
/src/utils/filePath.mjs:
--------------------------------------------------------------------------------
1 | export function filePath() {
2 | return function (tree, file) {
3 | const filepath = file.history[0]
4 | file.data.astro.frontmatter.filePath = filepath
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/src/utils/getDateTimeComponents.ts:
--------------------------------------------------------------------------------
1 | import {
2 | SECONDS_IN_YEAR,
3 | SECONDS_IN_MONTH,
4 | SECONDS_IN_DAY,
5 | SECONDS_IN_HOUR,
6 | SECONDS_IN_MINUTE,
7 | } from './timeSince'
8 |
9 | export const getDateTimeComponents = (timestamp: number) => {
10 | const components = {
11 | year: 0,
12 | month: 0,
13 | day: 0,
14 | hour: 0,
15 | minute: 0,
16 | second: 0,
17 | }
18 | let remaining: number = timestamp
19 |
20 | components.year = Math.floor(remaining / SECONDS_IN_YEAR)
21 | remaining -= components.year * SECONDS_IN_YEAR
22 |
23 | components.month = Math.floor(remaining / SECONDS_IN_MONTH)
24 | remaining -= components.month * SECONDS_IN_MONTH
25 |
26 | components.day = Math.floor(remaining / SECONDS_IN_DAY)
27 | remaining -= components.day * SECONDS_IN_DAY
28 |
29 | components.hour = Math.floor(remaining / SECONDS_IN_HOUR)
30 | remaining -= components.hour * SECONDS_IN_HOUR
31 |
32 | components.minute = Math.floor(remaining / SECONDS_IN_MINUTE)
33 | remaining -= components.minute * SECONDS_IN_MINUTE
34 |
35 | components.second = remaining
36 |
37 | return components
38 | }
39 |
--------------------------------------------------------------------------------
/src/utils/millisecondsToSeconds.ts:
--------------------------------------------------------------------------------
1 | export const MILLISECONDS_TO_SECONDS: number = 0.001
2 |
3 | export const millisecondsToSeconds = (milliseconds: number): number => {
4 | return Math.floor(milliseconds * MILLISECONDS_TO_SECONDS)
5 | }
6 |
--------------------------------------------------------------------------------
/src/utils/millisecondsToTimeUnits.ts:
--------------------------------------------------------------------------------
1 | import { getDateTimeComponents } from './getDateTimeComponents'
2 | import { millisecondsToSeconds } from './millisecondsToSeconds'
3 |
4 | export const millisecondsToTimeUnits = (milliseconds: number) => {
5 | const seconds = millisecondsToSeconds(milliseconds)
6 | return getDateTimeComponents(seconds)
7 | }
8 |
--------------------------------------------------------------------------------
/src/utils/modifiedTime.mjs:
--------------------------------------------------------------------------------
1 | import { execSync } from 'child_process'
2 |
3 | export function modifiedTime() {
4 | return function (tree, file) {
5 | const filepath = file.history[0]
6 | const result = execSync(`git log -1 --pretty="format:%cI" ${filepath}`)
7 | file.data.astro.frontmatter.lastModified = result.toString()
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/utils/timeSince.test.ts:
--------------------------------------------------------------------------------
1 | import { describe, expect, it } from 'vitest'
2 |
3 | import { timeSince } from './timeSince'
4 |
5 | describe('timeSince', () => {
6 | it('should return 1 second', () => {
7 | const date = new Date()
8 | date.setSeconds(date.getSeconds() - 1)
9 | expect(timeSince(date)).toBe('1 second')
10 | })
11 |
12 | it('should return 2 seconds', () => {
13 | const date = new Date()
14 | date.setSeconds(date.getSeconds() - 2)
15 | expect(timeSince(date)).toBe('2 seconds')
16 | })
17 |
18 | it('should return 1 minute', () => {
19 | const date = new Date()
20 | date.setMinutes(date.getMinutes() - 1)
21 | expect(timeSince(date)).toBe('1 minute')
22 | })
23 |
24 | it('should return 2 minutes', () => {
25 | const date = new Date()
26 | date.setMinutes(date.getMinutes() - 2)
27 | expect(timeSince(date)).toBe('2 minutes')
28 | })
29 |
30 | it('should return 1 hour', () => {
31 | const date = new Date()
32 | date.setHours(date.getHours() - 1)
33 | expect(timeSince(date)).toBe('1 hour')
34 | })
35 |
36 | it('should return 2 hours', () => {
37 | const date = new Date()
38 | date.setHours(date.getHours() - 2)
39 | expect(timeSince(date)).toBe('2 hours')
40 | })
41 |
42 | it('should return 1 day', () => {
43 | const date = new Date()
44 | date.setDate(date.getDate() - 1)
45 | expect(timeSince(date)).toBe('1 day')
46 | })
47 |
48 | it('should return 2 days', () => {
49 | const date = new Date()
50 | date.setDate(date.getDate() - 2)
51 | expect(timeSince(date)).toBe('2 days')
52 | })
53 |
54 | it('should return 1 month', () => {
55 | const date = new Date()
56 | date.setMonth(date.getMonth() - 1)
57 | //to contain because of the difference in days in months
58 | expect(timeSince(date)).toContain('1 month')
59 | })
60 |
61 | it('should return 2 months', () => {
62 | const date = new Date()
63 | date.setMonth(date.getMonth() - 2)
64 | //to contain because of the difference in days in months
65 | expect(timeSince(date)).toContain('2 months')
66 | })
67 |
68 | it('should return 1 year', () => {
69 | const date = new Date()
70 | date.setFullYear(date.getFullYear() - 1)
71 | expect(timeSince(date)).toBe('1 year')
72 | })
73 |
74 | it('should return 2 years', () => {
75 | const date = new Date()
76 | date.setFullYear(date.getFullYear() - 2)
77 | expect(timeSince(date)).toBe('2 years')
78 | })
79 |
80 | it('should return 1 year, 2 months', () => {
81 | const date = new Date()
82 | date.setFullYear(date.getFullYear() - 1)
83 | date.setMonth(date.getMonth() - 2)
84 | expect(timeSince(date)).toBe('1 year, 2 months')
85 | })
86 | })
87 |
--------------------------------------------------------------------------------
/src/utils/timeSince.ts:
--------------------------------------------------------------------------------
1 | import { addPluralFormEnding } from './addPluralFormEnding'
2 | import { millisecondsToTimeUnits } from './millisecondsToTimeUnits'
3 |
4 | export const SECONDS_IN_YEAR = 31536000
5 | export const SECONDS_IN_MONTH = 2592000
6 | export const SECONDS_IN_DAY = 86400
7 | export const SECONDS_IN_HOUR = 3600
8 |
9 | export const SECONDS_IN_MINUTE: number = 60
10 |
11 | export const timeSince = (date: Date): string => {
12 | const dateDiff = +new Date() - +date
13 |
14 | const timeObj = millisecondsToTimeUnits(dateDiff)
15 |
16 | const timeToDisplay = []
17 | for (const [key, value] of Object.entries(timeObj)) {
18 | if (timeToDisplay.length > 1) break
19 | if (value > 0) {
20 | timeToDisplay.push(`${value} ${key}${addPluralFormEnding(value)}`)
21 | }
22 | }
23 | return timeToDisplay.join(', ')
24 | }
25 |
--------------------------------------------------------------------------------
/src/utils/unknownToError.ts:
--------------------------------------------------------------------------------
1 | export const unknownToError = (maybeError: unknown) => {
2 | if (maybeError instanceof Error) {
3 | return maybeError
4 | }
5 |
6 | if (typeof maybeError === 'string') {
7 | return new Error(maybeError)
8 | }
9 |
10 | return new Error(String(maybeError))
11 | }
12 |
--------------------------------------------------------------------------------
/static/.nojekyll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NowYouKnowProgramming/webdev-learning-materials/0dab258dcc81f4f7f5a173df91f3a99e80bb8e46/static/.nojekyll
--------------------------------------------------------------------------------
/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from 'tailwindcss'
2 |
3 | import defaultTheme from 'tailwindcss/defaultTheme'
4 |
5 | module.exports = {
6 | content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],
7 | theme: {
8 | extend: {
9 | maxWidth: {
10 | docs: '2560px',
11 | },
12 | screens: {
13 | 'desktop-ui': '50em',
14 | },
15 | fontFamily: {
16 | sans: ['Poppins', ...defaultTheme.fontFamily.sans],
17 | serious: ['Inter', ...defaultTheme.fontFamily.sans],
18 | },
19 | colors: {
20 | backdrop: 'rgba(var(--color-backdrop), )',
21 | basetext: 'rgba(var(--color-text-base), )',
22 | 'grad-start': 'rgba(var(--color-gradient-start), )',
23 | 'grad-end': 'rgba(var(--color-gradient-end), )',
24 | },
25 | textColor: {
26 | theme: {
27 | base: 'rgba(var(--color-text-base), )',
28 | muted: 'rgba(var(--color-text-muted), )',
29 | inverted: 'rgba(var(--color-text-inverted), )',
30 | },
31 | },
32 | backgroundColor: {
33 | theme: {
34 | base: 'rgba(var(--color-bg-base), )',
35 | elevated: 'rgba(var(--color-bg-elevated), )',
36 | 'accent-primary': 'rgba(var(--color-accent-primary), )',
37 | 'accent-secondary':
38 | 'rgba(var(--color-accent-secondary), )',
39 | 'grad-start': 'rgba(var(--color-gradient-start), )',
40 | 'grad-end': 'rgba(var(--color-gradient-end), )',
41 | },
42 | },
43 | keyframes: {
44 | fade: {
45 | '0%': {
46 | opacity: '0%',
47 | },
48 | '100%': {
49 | opacity: '100%',
50 | },
51 | },
52 | slideDown: {
53 | from: { height: '0' },
54 | to: { height: 'var(--radix-accordion-content-height)' },
55 | },
56 | slideUp: {
57 | from: { height: 'var(--radix-accordion-content-height)' },
58 | to: { height: '0' },
59 | },
60 | },
61 | animation: {
62 | fade: 'fade 2s cubic-bezier(0.16, 1, 0.3, 1)',
63 | slideDown: 'slideDown 300ms cubic-bezier(0.87, 0, 0.13, 1)',
64 | slideUp: 'slideUp 300ms cubic-bezier(0.87, 0, 0.13, 1)',
65 | },
66 | },
67 | },
68 | plugins: [],
69 | } satisfies Config
70 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "astro/tsconfigs/strictest",
3 | "compilerOptions": {
4 | "jsx": "preserve",
5 | "skipLibCheck": true
6 | },
7 | "target": "es2020"
8 | }
9 |
--------------------------------------------------------------------------------
/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "github": {
3 | "silent": true
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/vitest.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vitest/config'
2 |
3 | export default defineConfig({
4 | test: {
5 | exclude: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/E2E/*'],
6 | },
7 | })
8 |
--------------------------------------------------------------------------------