Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb17d9346e | ||
|
|
ce73f5ad4f | ||
|
|
9184b4cc5c | ||
|
|
0b3a9cede3 | ||
|
|
80097e10d2 | ||
|
|
806ddbce9f | ||
|
|
72dfe514b8 | ||
|
|
28149e9e07 | ||
|
|
9001562723 | ||
|
|
f703b82b45 | ||
|
|
ae6e3f16a9 | ||
|
|
e7a93d11b4 | ||
|
|
2afed230e2 | ||
|
|
ec3400e28f | ||
|
|
97ada94671 | ||
|
|
0e3fb9056c | ||
|
|
4785778c9f | ||
|
|
fcda05c40c | ||
|
|
67c3db59a9 | ||
|
|
4ac98e6346 | ||
|
|
071f4eb084 | ||
|
|
e6e0033815 | ||
|
|
a7c98385b7 | ||
|
|
03f238769c | ||
|
|
a9b1322478 | ||
|
|
a864f69798 | ||
|
|
7d5a592ce5 | ||
|
|
60e67163aa | ||
|
|
f3717fa2db | ||
|
|
098c92367c | ||
|
|
08988fa7c0 | ||
|
|
1521f7341b | ||
|
|
73091ac1d7 | ||
|
|
e23ddbbf40 | ||
|
|
d9f97b8a78 | ||
|
|
746966f87b | ||
|
|
dc3fbd207e | ||
|
|
ae37de8243 | ||
|
|
109ecf46dd | ||
|
|
e962420178 | ||
|
|
7f8ef81102 | ||
|
|
96062523cc | ||
|
|
fd95c1b48e | ||
|
|
375befe630 | ||
|
|
ab0520e5ac | ||
|
|
3bddb18035 | ||
|
|
70cf7971f6 | ||
|
|
71939066a9 | ||
|
|
23444477d5 | ||
|
|
b8207c3295 | ||
|
|
a49be57a97 | ||
|
|
8212f0d9a6 | ||
|
|
d1071f4aa5 | ||
|
|
ad89e89497 | ||
|
|
c6f57f5b69 | ||
|
|
cbae31e598 | ||
|
|
d58dfe271a | ||
|
|
3fdc268214 | ||
|
|
8690cc3a1d | ||
|
|
e36bc3b504 | ||
|
|
586442c6f6 | ||
|
|
3f29b5989f | ||
|
|
e51607b31b | ||
|
|
a3577d98e7 | ||
|
|
8093725bec | ||
|
|
4e75d90d90 | ||
|
|
188774d36b | ||
|
|
dd273d53c6 | ||
|
|
fd8e35f39d | ||
|
|
b8adda773d | ||
|
|
0ce9a485ff | ||
|
|
9aaece4359 | ||
|
|
66fdc9fa54 | ||
|
|
18dc5d1bed | ||
|
|
0616ba66a9 | ||
|
|
3ff33ffb32 | ||
|
|
be84f978b3 | ||
|
|
7851fc0704 | ||
|
|
4b57535048 | ||
|
|
8ce36316d2 | ||
|
|
877cd689a5 | ||
|
|
03add19ac0 | ||
|
|
b6ffb4e707 | ||
|
|
2890d14e3d | ||
|
|
f48dabd223 | ||
|
|
3a4b123002 | ||
|
|
7d3d00d052 | ||
|
|
cf189f04fc | ||
|
|
4493a328ff | ||
|
|
2e2fac62d2 | ||
|
|
2d42e5b0a4 | ||
|
|
bee2b2fdbb | ||
|
|
4622891399 | ||
|
|
48c0aec795 | ||
|
|
d47cec609a | ||
|
|
7226b87a77 | ||
|
|
f96939e218 | ||
|
|
f4045dbe23 | ||
|
|
ae2d512ef8 | ||
|
|
545289eb11 | ||
|
|
3cbaed5f32 | ||
|
|
9dab80ac3a | ||
|
|
27c3150587 | ||
|
|
44af419411 | ||
|
|
779dddf000 | ||
|
|
f9d3c74d5a | ||
|
|
b9578fb377 | ||
|
|
d566cd9724 | ||
|
|
8ab2fdba38 | ||
|
|
951cc3119f | ||
|
|
6bd2cb7b7c | ||
|
|
65e234717c | ||
|
|
ecaeaec2e1 | ||
|
|
2edf1856cf | ||
|
|
049919836a | ||
|
|
d29de67f71 | ||
|
|
a20e18ab13 | ||
|
|
3a42ec92c1 | ||
|
|
42bd2724ae | ||
|
|
4f5d93f271 | ||
|
|
c9c33fcecb | ||
|
|
28573bebfd | ||
|
|
719307f241 | ||
|
|
84bd5e1c7a | ||
|
|
3bc207031e | ||
|
|
c65aaaf882 | ||
|
|
de8decf838 | ||
|
|
e96d170d2c | ||
|
|
0d2b2c4f5e | ||
|
|
5998f12a0a | ||
|
|
8ced364420 | ||
|
|
911fbac70f | ||
|
|
f81fba1594 | ||
|
|
8208edc257 | ||
|
|
5ff8015f93 | ||
|
|
6da68d7f40 | ||
|
|
59ab8a26cd | ||
|
|
ced3205186 | ||
|
|
41dde8429a | ||
|
|
8a0b0406bf | ||
|
|
d738212009 | ||
|
|
c283cb0e44 | ||
|
|
bbb52d5482 | ||
|
|
b0f79f99b2 | ||
|
|
2c9199f9a8 | ||
|
|
dc4842e2e8 | ||
|
|
3c57ca062a | ||
|
|
37209a8d60 | ||
|
|
6b23611595 | ||
|
|
60815bc7d9 | ||
|
|
6d51a87def | ||
|
|
4ab138942e | ||
|
|
db10974e8c | ||
|
|
a431f0420b | ||
|
|
9280cf20a2 | ||
|
|
d060602964 | ||
|
|
5d05bb8faf | ||
|
|
29a9f11d5c | ||
|
|
1058aa3ca8 | ||
|
|
d502f0cbb3 | ||
|
|
a555595791 | ||
|
|
9f38f42fc7 | ||
|
|
f8ef8b02bc | ||
|
|
630e0b0dbc | ||
|
|
5bce1d0e13 | ||
|
|
49d1547ffd | ||
|
|
a374e57786 | ||
|
|
c92cf4c694 | ||
|
|
ed2fb5d2c1 | ||
|
|
68981a2b5e | ||
|
|
b6bd5e109e | ||
|
|
0ac490529d | ||
|
|
bfca256b45 | ||
|
|
728d57c2ef | ||
|
|
5a6d298e56 | ||
|
|
8e902459ef | ||
|
|
346f15b19d | ||
|
|
1dd8ce7e2a | ||
|
|
6b527a91f2 | ||
|
|
82fb37a148 | ||
|
|
b15695207c | ||
|
|
f73c21fb9d | ||
|
|
514d6b37af | ||
|
|
fb238c605f | ||
|
|
937610a4e5 | ||
|
|
d5b108d4d3 | ||
|
|
e3d0e04316 | ||
|
|
c437e5fb31 | ||
|
|
425faacf89 | ||
|
|
fe00e0eaf9 | ||
|
|
2cdb140ec8 | ||
|
|
b0d6117b6c | ||
|
|
68760c2148 | ||
|
|
cfce3ade24 | ||
|
|
f46458340c | ||
|
|
d7b4f54851 | ||
|
|
61e769ad9d | ||
|
|
051e0fc5b1 | ||
|
|
2193723030 | ||
|
|
7ac4ff6c13 | ||
|
|
62ed5e184e | ||
|
|
0f4898cdce | ||
|
|
98c02d661c | ||
|
|
56a5092f77 | ||
|
|
76196c5c35 | ||
|
|
dc7ea8a89e | ||
|
|
cfb60c8d47 | ||
|
|
d317ff1734 | ||
|
|
8b040b0791 | ||
|
|
94b41030ab | ||
|
|
9bff4985e5 | ||
|
|
ae181d382f | ||
|
|
1682c471c4 | ||
|
|
05c5c6efd2 | ||
|
|
3318061bb1 | ||
|
|
55527e3beb | ||
|
|
2763752411 | ||
|
|
a221fbdcdf | ||
|
|
780fbbb1ec | ||
|
|
6da026b0e3 | ||
|
|
6ebd5700f1 | ||
|
|
4f61534c2a | ||
|
|
3558c5b082 | ||
|
|
e3d0c7e7d0 | ||
|
|
3166745123 | ||
|
|
7f648c95ee | ||
|
|
2182ba5a14 | ||
|
|
f0465d3cf1 | ||
|
|
4cf24af048 | ||
|
|
8cacba094a | ||
|
|
337536c9e6 | ||
|
|
581e75abd8 | ||
|
|
87eb612aa0 | ||
|
|
b2cee83e9f | ||
|
|
9085a4df85 | ||
|
|
bab49932d1 | ||
|
|
b12aa57102 | ||
|
|
fbf99cf8d1 | ||
|
|
228e4677ef | ||
|
|
4647fd6626 | ||
|
|
6edf3a877c | ||
|
|
1a0bc75cca | ||
|
|
ced9bf0056 | ||
|
|
c0542b09ac | ||
|
|
37a03b4f23 | ||
|
|
e7e588bed0 | ||
|
|
6e2a8c3a92 | ||
|
|
12cf8e3840 | ||
|
|
ef4feaa941 | ||
|
|
450ec74c06 | ||
|
|
b578513e71 | ||
|
|
df7adf28df | ||
|
|
76c3b3d907 | ||
|
|
ed189f6426 | ||
|
|
6e8cc4fda4 | ||
|
|
0d3b751a6d | ||
|
|
a7eae54c1f | ||
|
|
6bb523a0f0 | ||
|
|
e385fe27eb | ||
|
|
967900cd58 | ||
|
|
a26adfb137 | ||
|
|
eeff01403b | ||
|
|
5c6fe886ae | ||
|
|
c73419a889 | ||
|
|
29b14c2a78 | ||
|
|
062c61afd4 | ||
|
|
47e7d63497 | ||
|
|
b697327426 | ||
|
|
93e79c15a5 | ||
|
|
f5dd79aa11 | ||
|
|
0ae882f50f | ||
|
|
d8dd040601 | ||
|
|
e0598ac9ad | ||
|
|
d89b37860d | ||
|
|
de196fee27 | ||
|
|
989a20539c | ||
|
|
3066e24a16 | ||
|
|
865bc96814 | ||
|
|
f84ecce6d0 | ||
|
|
fee247d837 | ||
|
|
69d97eb5c7 | ||
|
|
eb1c4beb14 | ||
|
|
8bd68603b1 | ||
|
|
a87ea0a399 | ||
|
|
1a69f53a16 | ||
|
|
ba5e0969d3 | ||
|
|
b0edc25e0c | ||
|
|
7487af5929 | ||
|
|
69a0e9e213 | ||
|
|
4f25652e29 | ||
|
|
d145714a3c | ||
|
|
6a19035279 | ||
|
|
5b843617ca | ||
|
|
42e3fbedb9 | ||
|
|
4250415fcd | ||
|
|
d95606af48 | ||
|
|
8c072d12b8 | ||
|
|
71da2a1255 | ||
|
|
1c43c32f18 | ||
|
|
8c8cc0a282 | ||
|
|
0338e3c26e | ||
|
|
31ddb0fc4e | ||
|
|
68d6388033 | ||
|
|
05255d1954 | ||
|
|
d6ee6be558 | ||
|
|
bc18cbed40 | ||
|
|
130ecf4b3e | ||
|
|
d1c1eab611 | ||
|
|
f27497cdbf | ||
|
|
39bf129207 | ||
|
|
963ea26d92 | ||
|
|
6de486b2d8 | ||
|
|
a72ad88d42 | ||
|
|
54c8c43a21 | ||
|
|
6de36a7181 | ||
|
|
aeede69061 | ||
|
|
11caab27c7 | ||
|
|
375cd196f5 | ||
|
|
f89228ecc1 | ||
|
|
36e969f868 | ||
|
|
d64d91eac2 | ||
|
|
16f6310e1f | ||
|
|
55704b37d6 | ||
|
|
146163d5bc | ||
|
|
760fd58f91 | ||
|
|
ce07e13a78 | ||
|
|
58fa1c13c5 | ||
|
|
cb2ea3d1ca | ||
|
|
60e0bd4c82 | ||
|
|
23b2c6d069 | ||
|
|
dbf46e6de7 | ||
|
|
ee3a0581a3 | ||
|
|
fb532f7871 | ||
|
|
21395d1a38 | ||
|
|
bd1583c5a1 | ||
|
|
6b0487b4b9 | ||
|
|
a3295ebe98 | ||
|
|
813b008eb5 | ||
|
|
81f4fc1abc | ||
|
|
b91130ca6b | ||
|
|
e6beeb7f1c | ||
|
|
c73e2210ab | ||
|
|
02f3ed4294 | ||
|
|
2a43994399 | ||
|
|
d56e1aaaa1 | ||
|
|
a4132a87f3 | ||
|
|
bf3ea9dd27 | ||
|
|
6b441f105b | ||
|
|
b647c93cd7 | ||
|
|
d46cd67ee4 | ||
|
|
8f063f918e | ||
|
|
070351b2b6 | ||
|
|
cc26293585 | ||
|
|
59e0036684 | ||
|
|
dcb078c535 | ||
|
|
79e5477d9d | ||
|
|
dc7e15b7de | ||
|
|
681e2bb5d1 | ||
|
|
f71e9734c7 | ||
|
|
3ce4a78f3f | ||
|
|
ee1e366923 | ||
|
|
b5a684d65d | ||
|
|
7bff0c8c67 | ||
|
|
2f66b91b3c | ||
|
|
98bfd93510 | ||
|
|
24488e0590 | ||
|
|
fb6bb126fe | ||
|
|
7a88ec5d3e | ||
|
|
1455ab2563 | ||
|
|
24faee332b | ||
|
|
e539b925a1 | ||
|
|
39f5405e49 | ||
|
|
5e80465f27 | ||
|
|
ba18a35fb6 | ||
|
|
1b44fa59e0 | ||
|
|
ae47517fdb | ||
|
|
d0d9106104 | ||
|
|
71499413d0 | ||
|
|
bcc919b76f | ||
|
|
34f72b8668 | ||
|
|
8f3632bc37 | ||
|
|
02e2bef79a | ||
|
|
39410189b7 | ||
|
|
d46c0c9568 | ||
|
|
9bf6f5f350 | ||
|
|
af2c41e0db | ||
|
|
21b7679b2e | ||
|
|
e5a92baba8 | ||
|
|
7dadb962ab | ||
|
|
7b254b8be8 | ||
|
|
86c6446a4c | ||
|
|
bcbfcf8d84 | ||
|
|
8898ae1fc0 | ||
|
|
b1c86fb7a4 | ||
|
|
fe44a24a75 | ||
|
|
41d2bebe33 | ||
|
|
83747be240 | ||
|
|
26bb782f4f | ||
|
|
69b6f8dadb | ||
|
|
b25eb2fb3a | ||
|
|
c9de235d90 | ||
|
|
7a05d6b18b | ||
|
|
75338212cd | ||
|
|
b1941015e7 | ||
|
|
9868f4ccb2 | ||
|
|
550f0a1d7d | ||
|
|
b5f21e6126 | ||
|
|
050fa25fe6 | ||
|
|
8c54b10e7e | ||
|
|
9b9787acea | ||
|
|
4a5e8f0aad | ||
|
|
baa5e50169 | ||
|
|
9e93630751 | ||
|
|
19d64980ad | ||
|
|
cf339f0c46 | ||
|
|
20804b469f | ||
|
|
0035453719 | ||
|
|
515fa782cc | ||
|
|
954beb9cbc | ||
|
|
8c69b935ba | ||
|
|
1fd77d6c69 | ||
|
|
85a1cedf01 | ||
|
|
470059e59f | ||
|
|
b9cc8065c5 | ||
|
|
76318ccb83 | ||
|
|
a85ee3c23c | ||
|
|
33e364effe | ||
|
|
0d9eb6334e | ||
|
|
b21a36a901 | ||
|
|
06bf16334f | ||
|
|
c52a13ceba | ||
|
|
f87d9f08ae | ||
|
|
ab3dc09909 | ||
|
|
da92e17410 | ||
|
|
5508100fe2 | ||
|
|
2fb13e13d9 | ||
|
|
3d9f79bdb7 | ||
|
|
2e6a7e346a | ||
|
|
08d5a631be | ||
|
|
a96a637cb8 | ||
|
|
d3fd4335b7 | ||
|
|
b0aad96917 | ||
|
|
4d1decd737 | ||
|
|
091441b23e | ||
|
|
3c584b2530 | ||
|
|
d909ceb3d0 | ||
|
|
02050ac379 | ||
|
|
65f268aa3d | ||
|
|
b7d28ed3cb | ||
|
|
f1f9eb67aa | ||
|
|
5f27cd4bab | ||
|
|
78e76118d0 | ||
|
|
3115ec495b | ||
|
|
9afacf624d | ||
|
|
48883c79c3 | ||
|
|
f85ef5f02c | ||
|
|
e6d3e86126 | ||
|
|
1374c01be1 | ||
|
|
2cd6838dc4 | ||
|
|
75d9b471d7 | ||
|
|
34a2bd4716 | ||
|
|
81e2ebb42c | ||
|
|
e2128accc3 | ||
|
|
9f54bb6faa | ||
|
|
9ef4cfee57 | ||
|
|
b063985b7c | ||
|
|
f7e0ad95de | ||
|
|
3f72d60f1a | ||
|
|
86c3f0b8a5 | ||
|
|
0f7158cd9b | ||
|
|
b93d1f3aee | ||
|
|
7963756c06 | ||
|
|
1a79dcadd2 | ||
|
|
517edd1eed | ||
|
|
e55cd597c2 | ||
|
|
5d5191cc1b | ||
|
|
64d5d4630c | ||
|
|
0c159ca3a6 | ||
|
|
68f4ab27b0 | ||
|
|
c422e7477b | ||
|
|
68f603d300 | ||
|
|
ce94b05c44 | ||
|
|
d9c55c83d7 | ||
|
|
ff8ed1f6e7 | ||
|
|
581e42d775 | ||
|
|
7fab6b7f88 | ||
|
|
56623bb7a5 | ||
|
|
ba19d07a58 | ||
|
|
fb2e35959f | ||
|
|
a9c63fe255 | ||
|
|
1284f3f229 | ||
|
|
e958b70bd8 |
@@ -98,7 +98,7 @@ jobs:
|
||||
- name: Installation of Dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install --no-cache-dir pydantic PyGithub aiohttp beautifulsoup4 httpx fake-useragent pytz python-dotenv twikit>=2.1.2 playwright playwright-stealth pyyaml tenacity
|
||||
pip install --no-cache-dir pydantic PyGithub aiohttp beautifulsoup4 httpx fake-useragent pytz python-dotenv twikit>=2.1.2 playwright playwright-stealth pyyaml tenacity feedparser
|
||||
|
||||
- name: Cache Playwright Binaries
|
||||
uses: actions/cache@v5
|
||||
@@ -111,7 +111,17 @@ jobs:
|
||||
if: steps.playwright-cache.outputs.cache-hit != 'true'
|
||||
run: playwright install chromium --with-deps
|
||||
|
||||
- name: Restore Incremental Inventory Cache
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
path: data/inventory.yaml
|
||||
key: inventory-curation-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
restore-keys: |
|
||||
inventory-curation-
|
||||
|
||||
- name: Workflow UI Synchronization Check (Mandate 11)
|
||||
env:
|
||||
PYTHONPATH: .
|
||||
run: |
|
||||
python src/sync_workflow_ui.py
|
||||
|
||||
@@ -151,7 +161,7 @@ jobs:
|
||||
|
||||
if [ $EXIT_CODE -eq 42 ]; then
|
||||
echo "🚨 CIRCUIT BREAKER TRIPPED: Disabling workflow to prevent quota drain."
|
||||
gh workflow disable agentic_cron.yml
|
||||
gh workflow disable 01.1.agentic_cron.yml
|
||||
exit 1
|
||||
elif [ $EXIT_CODE -ne 0 ]; then
|
||||
exit $EXIT_CODE
|
||||
@@ -165,7 +175,7 @@ jobs:
|
||||
if [ "${{ github.event.inputs.historical_chunked }}" == "true" ] && grep -q "NEXT_CHUNK_START:" output.log; then
|
||||
NEXT_DATE=$(grep "NEXT_CHUNK_START:" output.log | awk '{print $2}')
|
||||
echo "Triggering next historical chunk until: $NEXT_DATE"
|
||||
gh workflow run agentic_cron.yml -f historical_mode=true -f historical_chunked=true -f historical_until_date=$NEXT_DATE
|
||||
gh workflow run 01.1.agentic_cron.yml -f historical_mode=true -f historical_chunked=true -f historical_until_date=$NEXT_DATE
|
||||
fi
|
||||
|
||||
- name: Upload Visual Dashboard Artifact
|
||||
@@ -193,4 +203,12 @@ jobs:
|
||||
TITLE="Curation Report: $STATUS - $(date +'%Y-%m-%d')"
|
||||
BODY="### Nubenetes Automated Curation has finished.\n\n**Status:** $STATUS\n**Pull Request:** $PR_URL\n\nCheck the [workflow logs]($RUN_URL) for more details. If a visual report was generated, you can download it from the artifacts section of the workflow run."
|
||||
|
||||
gh label create "curation-report" --color "0E8A16" --description "Automated curation run reports" || true
|
||||
gh issue create --title "$TITLE" --body "$BODY" --label "curation-report" || echo "Failed to create issue"
|
||||
|
||||
- name: Persist Incremental Inventory to Cache
|
||||
if: always()
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
path: data/inventory.yaml
|
||||
key: inventory-curation-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
|
||||
- name: Restore Incremental Inventory Cache
|
||||
if: ${{ github.event.inputs.restore_cache == 'true' }}
|
||||
uses: actions/cache/restore@v4
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
path: data/inventory.yaml
|
||||
key: inventory-v2-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
@@ -68,7 +68,7 @@ jobs:
|
||||
|
||||
- name: Persist Incremental Inventory to Cache
|
||||
if: always()
|
||||
uses: actions/cache/save@v4
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
path: data/inventory.yaml
|
||||
key: inventory-v2-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
|
||||
@@ -18,8 +18,8 @@ permissions:
|
||||
pull-requests: write
|
||||
|
||||
concurrency:
|
||||
group: v2-metadata-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
group: v2-pipeline-${{ github.ref }}
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
run-metadata:
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
|
||||
- name: Restore Incremental Inventory Cache
|
||||
if: ${{ github.event.inputs.restore_cache == 'true' }}
|
||||
uses: actions/cache/restore@v4
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
path: data/inventory.yaml
|
||||
key: inventory-v2-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
@@ -57,18 +57,22 @@ jobs:
|
||||
PYTHONUNBUFFERED: "1"
|
||||
run: python -u -m src.v2_metadata
|
||||
|
||||
- name: Create Pull Request for Metadata Update
|
||||
uses: peter-evans/create-pull-request@v8
|
||||
with:
|
||||
branch: bot/v2-metadata-sync
|
||||
base: develop
|
||||
title: "V2 Data: GitHub Metadata Sync"
|
||||
commit-message: "chore: update inventory stars and licenses [skip ci]"
|
||||
labels: "v2-data, metadata-sync"
|
||||
- name: Commit and Push Metadata Updates
|
||||
run: |
|
||||
git config --global user.name "Nubenetes Bot"
|
||||
git config --global user.email "bot@nubenetes.com"
|
||||
git add data/inventory.yaml
|
||||
if git diff --staged --quiet; then
|
||||
echo "No changes in inventory.yaml to commit."
|
||||
else
|
||||
git commit -m "chore: update inventory stars and licenses [skip ci]"
|
||||
git pull origin develop --rebase
|
||||
git push origin develop
|
||||
fi
|
||||
|
||||
- name: Persist Incremental Inventory to Cache
|
||||
if: always()
|
||||
uses: actions/cache/save@v4
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
path: data/inventory.yaml
|
||||
key: inventory-v2-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
|
||||
@@ -1,6 +1,15 @@
|
||||
name: 03.2. V2 AI Curator
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
paths:
|
||||
- 'data/inventory.yaml'
|
||||
workflow_run:
|
||||
workflows: ["03.1. V2 Metadata Engine"]
|
||||
types:
|
||||
- completed
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
force_reevaluate:
|
||||
@@ -18,12 +27,15 @@ permissions:
|
||||
pull-requests: write
|
||||
|
||||
concurrency:
|
||||
group: v2-ai-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
group: v2-pipeline-${{ github.ref }}
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
run-ai:
|
||||
runs-on: ubuntu-latest
|
||||
if: |
|
||||
github.event_name != 'workflow_run' ||
|
||||
github.event.workflow_run.conclusion == 'success'
|
||||
steps:
|
||||
- name: Repository Synchronization
|
||||
uses: actions/checkout@v6
|
||||
@@ -38,7 +50,7 @@ jobs:
|
||||
|
||||
- name: Restore Incremental Inventory Cache
|
||||
if: ${{ github.event.inputs.restore_cache == 'true' }}
|
||||
uses: actions/cache/restore@v4
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
path: data/inventory.yaml
|
||||
key: inventory-v2-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
@@ -59,18 +71,22 @@ jobs:
|
||||
PYTHONUNBUFFERED: "1"
|
||||
run: python -u -m src.v2_ai
|
||||
|
||||
- name: Create Pull Request for Inventory Update
|
||||
uses: peter-evans/create-pull-request@v8
|
||||
with:
|
||||
branch: bot/v2-ai-sync
|
||||
base: develop
|
||||
title: "V2 Data: AI Curator Sync"
|
||||
commit-message: "chore: update inventory AI analysis [skip ci]"
|
||||
labels: "v2-data, ai-curator"
|
||||
- name: Commit and Push AI Analysis Updates
|
||||
run: |
|
||||
git config --global user.name "Nubenetes Bot"
|
||||
git config --global user.email "bot@nubenetes.com"
|
||||
git add data/inventory.yaml
|
||||
if git diff --staged --quiet; then
|
||||
echo "No changes in AI analysis to commit."
|
||||
else
|
||||
git commit -m "chore: update inventory AI analysis"
|
||||
git pull origin develop --rebase
|
||||
git push origin develop
|
||||
fi
|
||||
|
||||
- name: Persist Incremental Inventory to Cache
|
||||
if: always()
|
||||
uses: actions/cache/save@v4
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
path: data/inventory.yaml
|
||||
key: inventory-v2-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
|
||||
@@ -8,6 +8,13 @@ on:
|
||||
- 'src/v2_video_portal.py'
|
||||
- 'src/enrich_videos.py'
|
||||
- 'data/inventory.yaml'
|
||||
workflow_run:
|
||||
workflows: ["03.2. V2 AI Curator"]
|
||||
branches: [develop]
|
||||
types:
|
||||
- completed
|
||||
schedule:
|
||||
- cron: '0 6 1 * *' # Runs on the 1st of every month at 06:00 UTC (every ~30 days)
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
restore_cache:
|
||||
@@ -26,12 +33,15 @@ permissions:
|
||||
pull-requests: write
|
||||
|
||||
concurrency:
|
||||
group: v2-video-hub-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
group: v2-pipeline-${{ github.ref }}
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build-video-hub:
|
||||
runs-on: ubuntu-latest
|
||||
if: |
|
||||
github.event_name != 'workflow_run' ||
|
||||
github.event.workflow_run.conclusion == 'success'
|
||||
steps:
|
||||
- name: Repository Synchronization
|
||||
uses: actions/checkout@v6
|
||||
@@ -46,7 +56,7 @@ jobs:
|
||||
|
||||
- name: Restore Incremental Inventory Cache
|
||||
if: ${{ github.event.inputs.restore_cache == 'true' }}
|
||||
uses: actions/cache/restore@v4
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
path: data/inventory.yaml
|
||||
key: inventory-v2-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
@@ -72,23 +82,22 @@ jobs:
|
||||
export PYTHONPATH=$PYTHONPATH:.
|
||||
python src/v2_video_portal.py
|
||||
|
||||
- name: Create Pull Request for Video Hub Update
|
||||
uses: peter-evans/create-pull-request@v8
|
||||
with:
|
||||
branch: bot/v2-video-sync
|
||||
base: develop
|
||||
title: "V2 Content: Video Hub Enrichment Sync"
|
||||
commit-message: "docs: update Video Hub with high-fidelity metadata [skip ci]"
|
||||
labels: "v2-content, video-hub"
|
||||
body: |
|
||||
Automated update of the V2 Video Hub.
|
||||
- Robust metadata extraction (yt-dlp + transcripts)
|
||||
- AI-synthesized technical summaries
|
||||
- Format-compliant Markdown rendering
|
||||
- name: Commit and Push Video Hub Updates
|
||||
run: |
|
||||
git config --global user.name "Nubenetes Bot"
|
||||
git config --global user.email "bot@nubenetes.com"
|
||||
git add data/inventory.yaml v2-docs/videos/
|
||||
if git diff --staged --quiet; then
|
||||
echo "No automated changes to commit."
|
||||
else
|
||||
git commit -m "docs: update Video Hub with high-fidelity metadata"
|
||||
git pull origin develop --rebase
|
||||
git push origin develop
|
||||
fi
|
||||
|
||||
- name: Persist Incremental Inventory Cache
|
||||
if: always()
|
||||
uses: actions/cache/save@v4
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
path: data/inventory.yaml
|
||||
key: inventory-v2-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
|
||||
@@ -7,6 +7,10 @@ on:
|
||||
paths:
|
||||
- 'data/inventory.yaml'
|
||||
- 'docs/**'
|
||||
workflow_run:
|
||||
workflows: ["03.3. V2 Video Hub Builder"]
|
||||
types:
|
||||
- completed
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
restore_cache:
|
||||
@@ -20,7 +24,7 @@ permissions:
|
||||
pull-requests: write
|
||||
|
||||
concurrency:
|
||||
group: v2-publisher-${{ github.ref }}
|
||||
group: v2-pipeline-${{ github.ref }}
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
@@ -30,7 +34,8 @@ jobs:
|
||||
github.event_name == 'workflow_dispatch' ||
|
||||
(github.event_name == 'push' &&
|
||||
!contains(github.event.head_commit.message, '[skip ci]') &&
|
||||
!contains(github.event.head_commit.message, 'bot/v2-elite-sync'))
|
||||
!contains(github.event.head_commit.message, 'bot/v2-elite-sync')) ||
|
||||
(github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success')
|
||||
steps:
|
||||
- name: Repository Synchronization
|
||||
uses: actions/checkout@v6
|
||||
@@ -46,7 +51,7 @@ jobs:
|
||||
|
||||
- name: Restore Incremental Inventory Cache
|
||||
if: ${{ github.event.inputs.restore_cache == 'true' }}
|
||||
uses: actions/cache/restore@v4
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
path: data/inventory.yaml
|
||||
key: inventory-v2-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
@@ -63,6 +68,12 @@ jobs:
|
||||
run: |
|
||||
python -u src/v2_video_portal.py
|
||||
|
||||
- name: Execute Mosaic Reorganization
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
run: |
|
||||
python src/reorganize_mosaic.py
|
||||
|
||||
- name: Run V2 Publisher (Render-Only)
|
||||
env:
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
@@ -82,43 +93,52 @@ jobs:
|
||||
python -m src.readme_updater
|
||||
python -m src.safety_readme
|
||||
|
||||
- name: Create Pull Request for V2 Elite Update
|
||||
id: cpr
|
||||
uses: peter-evans/create-pull-request@v8
|
||||
- name: Commit and Push V2 Elite Updates
|
||||
run: |
|
||||
git config --global user.name "Nubenetes Bot"
|
||||
git config --global user.email "bot@nubenetes.com"
|
||||
git add -A
|
||||
if git diff --staged --quiet; then
|
||||
echo "No automated changes to commit."
|
||||
else
|
||||
git commit -m "feat: sync V2 elite curated edition and README metrics [skip ci]"
|
||||
git pull origin develop --rebase
|
||||
git push origin develop
|
||||
fi
|
||||
|
||||
- name: Create or Update Promotion PR to Master
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
git pull origin develop --rebase
|
||||
# Check if a PR already exists
|
||||
PR_EXISTS=$(gh pr list --head develop --base master --json number --jq '.[0].number')
|
||||
|
||||
if [ -z "$PR_EXISTS" ]; then
|
||||
echo "Creating new PR from develop to master..."
|
||||
gh pr create \
|
||||
--base master \
|
||||
--head develop \
|
||||
--title "🚀 Release: Agentic V2 Portal Update" \
|
||||
--body "Automated promotion from develop to master. This PR includes updated V2 Elite portal content, AI-enriched metadata, and synchronized README metrics. Please review and merge to deploy to production."
|
||||
else
|
||||
echo "PR #$PR_EXISTS already exists. No action needed (it will auto-update with the push)."
|
||||
fi
|
||||
|
||||
- name: Upload Architecture and Decision Logs
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
branch: bot/v2-elite-sync
|
||||
base: develop
|
||||
title: "V2 Elite: Agentic Optimization Sync (2026)"
|
||||
body-path: pr_description.md
|
||||
commit-message: "feat: sync V2 elite curated edition and README metrics [skip ci]"
|
||||
labels: "v2-elite, agentic-sync"
|
||||
|
||||
- name: Post Supplementary Architecture Audit (Comment)
|
||||
if: steps.cpr.outputs.pull-request-number != ''
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
PR_NUMBER: ${{ steps.cpr.outputs.pull-request-number }}
|
||||
run: |
|
||||
if [ -f v2_file_audit.md ]; then
|
||||
gh pr comment $PR_NUMBER --body-file v2_file_audit.md
|
||||
fi
|
||||
|
||||
- name: Post Elite Decision Matrix (Comment)
|
||||
if: steps.cpr.outputs.pull-request-number != ''
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
PR_NUMBER: ${{ steps.cpr.outputs.pull-request-number }}
|
||||
run: |
|
||||
if [ -f v2_decision_matrix.md ]; then
|
||||
split -b 60000 v2_decision_matrix.md matrix_part_
|
||||
for part in matrix_part_*; do
|
||||
gh pr comment $PR_NUMBER --body-file $part
|
||||
done
|
||||
fi
|
||||
name: v2-agentic-logs
|
||||
path: |
|
||||
v2_file_audit.md
|
||||
v2_decision_matrix.md
|
||||
v2_safety_report.md
|
||||
if-no-files-found: ignore
|
||||
|
||||
- name: Persist Incremental Inventory to Cache
|
||||
if: always()
|
||||
uses: actions/cache/save@v4
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
path: data/inventory.yaml
|
||||
key: inventory-v2-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
|
||||
- name: Restore Incremental Inventory Cache (Mandate 22)
|
||||
if: ${{ github.event.inputs.restore_cache == 'true' }}
|
||||
uses: actions/cache/restore@v4
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
path: data/inventory.yaml
|
||||
key: inventory-v2-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
|
||||
@@ -12,16 +12,19 @@ permissions:
|
||||
contents: write
|
||||
|
||||
concurrency:
|
||||
group: readme-sync-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
group: v2-pipeline-${{ github.ref }}
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
sync-readme:
|
||||
runs-on: ubuntu-latest
|
||||
if: |
|
||||
!contains(github.event.head_commit.message, '[skip ci]') &&
|
||||
!contains(github.event.head_commit.message, 'bot/v2-elite-sync') &&
|
||||
!contains(github.event.head_commit.message, 'bot/knowledge-update')
|
||||
github.event_name == 'workflow_dispatch' || (
|
||||
github.event.head_commit != null &&
|
||||
!contains(github.event.head_commit.message, '[skip ci]') &&
|
||||
!contains(github.event.head_commit.message, 'bot/v2-elite-sync') &&
|
||||
!contains(github.event.head_commit.message, 'bot/knowledge-update')
|
||||
)
|
||||
steps:
|
||||
- name: Repository Synchronization
|
||||
uses: actions/checkout@v6
|
||||
@@ -57,5 +60,6 @@ jobs:
|
||||
echo "No changes in README.md to commit."
|
||||
else
|
||||
git commit -m "docs: automated README metric synchronization [skip ci]"
|
||||
git pull origin develop --rebase
|
||||
git push origin develop
|
||||
fi
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
name: 06.1. GitHub Pages Deploy
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
# Allow only one concurrent deployment
|
||||
concurrency:
|
||||
group: "pages"
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build Dual Versions
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout master
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
cache: 'pip'
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pip install -r requirements.txt
|
||||
|
||||
# 1. Build V1 (Root)
|
||||
- name: Build V1 Edition
|
||||
run: mkdocs build -f mkdocs.yml -d site/
|
||||
|
||||
# 2. Build V2 (Subdirectory)
|
||||
- name: Build V2 Elite Edition
|
||||
run: mkdocs build -f v2-mkdocs.yml -d site/v2/
|
||||
|
||||
- name: Setup Pages
|
||||
uses: actions/configure-pages@v4
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
path: './site'
|
||||
|
||||
deploy:
|
||||
name: Deploy to GitHub Pages
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
name: 06.1. Final Portal Deploy
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch: {}
|
||||
|
||||
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
||||
permissions:
|
||||
contents: write
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
# Allow only one concurrent deployment
|
||||
concurrency:
|
||||
group: "pages-stable"
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build Dual Versions
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout master
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: '3.11'
|
||||
cache: 'pip'
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pip install mkdocs-material mkdocs-redirects mkdocs-minify-plugin pymdown-extensions
|
||||
pip install -r requirements.txt
|
||||
|
||||
# 1. Build V1 to a temporary staging area
|
||||
- name: Build V1 Edition (Staging)
|
||||
run: mkdocs build -f mkdocs.yml -d site_v1_temp/
|
||||
|
||||
# 2. Deploy V1 to Root (SEO) and /v1/ (Fallback)
|
||||
- name: Deploy V1 to Root and Subdirectory
|
||||
run: |
|
||||
mkdir -p site/v1/
|
||||
cp -r site_v1_temp/* site/
|
||||
cp -r site_v1_temp/* site/v1/
|
||||
rm -rf site_v1_temp/
|
||||
|
||||
# 3. Build V2 Elite Edition (/v2/)
|
||||
- name: Build V2 Elite Edition
|
||||
run: mkdocs build -f v2-mkdocs.yml -d site/v2/
|
||||
|
||||
# 4. Inject Root Redirect to V2 - Human visitors land on V2 by default
|
||||
- name: Inject Root Redirect to V2
|
||||
run: |
|
||||
cat << 'EOF' > site/index.html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Nubenetes Redirect</title>
|
||||
<meta http-equiv="refresh" content="0; url=/v2/">
|
||||
</head>
|
||||
<body>
|
||||
<p>Redirecting to the V2 Elite Portal. <a href="/v2/">Click here</a>.</p>
|
||||
</body>
|
||||
</html>
|
||||
EOF
|
||||
|
||||
- name: Setup Pages
|
||||
uses: actions/configure-pages@v6
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v5
|
||||
with:
|
||||
path: './site'
|
||||
|
||||
deploy:
|
||||
name: Deploy to GitHub Pages
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v5
|
||||
@@ -3,6 +3,12 @@ name: 07.1. PR Guardian AI
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
pr_number:
|
||||
description: 'PR number to analyze'
|
||||
required: false
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
agentic-presubmit:
|
||||
@@ -29,7 +35,7 @@ jobs:
|
||||
GEMINI_API_KEY_1: ${{ secrets.GEMINI_API_KEY_1 }}
|
||||
GEMINI_API_KEY_2: ${{ secrets.GEMINI_API_KEY_2 }}
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
PR_NUMBER: ${{ github.event.pull_request.number }}
|
||||
PR_NUMBER: ${{ github.event.inputs.pr_number || github.event.pull_request.number }}
|
||||
PYTHONPATH: ${{ github.workspace }}
|
||||
run: |
|
||||
python src/pr_guardian.py
|
||||
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '20'
|
||||
|
||||
|
||||
@@ -5,6 +5,370 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [[2.4.1]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.4.1) - 2026-06-15
|
||||
|
||||
### Changed
|
||||
- **V2 Default Theme to Dark Mode**: Set the "slate" (dark) theme as the default for the V2 Elite Portal, ensuring a high-density "Cyber Cloud" first impression.
|
||||
- **Theme Resilience**: Removed system color scheme preference detection for V2 to prevent automatic switching to light mode, while preserving the manual toggle for user choice.
|
||||
|
||||
## [[2.4.0]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.4.0) - 2026-06-12
|
||||
|
||||
### Changed
|
||||
- **SEO-Friendly URL Structure**: Reverted the entire ecosystem to use clean directory URLs (e.g., `/demos/` instead of `/demos.html`) by enabling `use_directory_urls: true` in both V1 and V2 configurations.
|
||||
- **Mandatory Path Standard**: Updated `GEMINI.md` mandates to establish root-relative paths (e.g., `/images/`) as the standard for manual HTML assets to prevent breakage across directory levels.
|
||||
- **V2 Optimization Automation**: Updated `src/v2_optimizer.py` to ensure all future automated regenerations of the V2 Elite Portal follow the clean URL and absolute path standard.
|
||||
|
||||
### Fixed
|
||||
- **V2 Index Navigation**: Corrected all manual HTML navigation badges in the V2 index to use clean directory paths, resolving 404 errors during the SEO transition.
|
||||
|
||||
## [[2.3.44]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.44) - 2026-06-10
|
||||
|
||||
### Added
|
||||
- **Grafana AI Observability Video**: Added "AI Observability Deep Dive Demo | Grafana Cloud" by Ivana Hučková to the V2 Video Hub under the "AI Agents and Observability" section.
|
||||
|
||||
## [[2.3.43]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.43) - 2026-06-03
|
||||
|
||||
### Fixed
|
||||
- **Mermaid Diagram Text Overflow**: Wrapped long text strings inside the "4.2. Hardened Architecture (2026)" Mermaid diagram in `README.md` using `<br>` to prevent text clipping and rendering issues in standard Markdown viewers.
|
||||
|
||||
## [[2.3.42]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.42) - 2026-06-03
|
||||
|
||||
### Fixed
|
||||
- **Mobile Drawer Contrast (V2)**: Resolved contrast issues in the Nubenetes V2 mobile navigation drawer under dark mode (`slate`) by overriding `.md-nav__title`, logo, icons, and `.md-nav__source` background/foreground colors. This ensures readable white text and visible icons on dark backgrounds.
|
||||
|
||||
## [[2.3.41]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.41) - 2026-06-03
|
||||
|
||||
### Fixed
|
||||
- **Agentic Pulse Metadata and Sort Logic**: Corrected the V2 optimizer script (`src/v2_optimizer.py`) to query the correct `year` attribute instead of the non-existent `pub_date` when rendering the Agentic Pulse section on the V2 home page, and introduced fallback sorting logic for entries without explicit publication years to ensure chronological precision.
|
||||
|
||||
## [[2.3.40]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.40) - 2026-06-03
|
||||
|
||||
### Removed
|
||||
- **Deprecated AWS Quick Start Reference**: Confirmed retirement of the AWS Quick Starts program (replaced globally by AWS Partner Solutions), removed `https://aws.amazon.com/es/quickstart` from the centralized inventory database, and updated the V1 and V2 documentation files to delete the dead references.
|
||||
|
||||
## [[2.3.39]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.39) - 2026-06-02
|
||||
|
||||
### Added
|
||||
- **ClickHouse YouTube Channel Integration**: Registered the official ClickHouse YouTube channel in the centralized inventory and regenerated both the V1 and V2 homepage mosaics, sorting ClickHouse under the Observability, Databases & Cloud Storage category in V2.
|
||||
- **ClickHouse SVG Logo Asset**: Added a color-coded orange SVG logo for ClickHouse to guarantee legibility across light and dark platforms.
|
||||
|
||||
## [[2.3.38]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.38) - 2026-06-02
|
||||
|
||||
### Added
|
||||
- **YouTube Embed Iframe Refusal Fix**: Solved the `www.youtube.com refused to connect` error in video iframe players by implementing a parser (`to_embed_url`) in the generator script to dynamically rewrite standard YouTube watch/shortened URLs into the required embed format, fully preserving start-times (`start=...`) and playlist IDs (`list=...`).
|
||||
|
||||
### Fixed
|
||||
- **MD037 Lint Fix (Video Portal)**: Fixed a markdown linter failure in `v2-docs/videos/cloud-native.md` (and other video documents) by converting asterisk-based bullets (`* `) in video summaries to dash-based bullets (`- `). This avoids syntax collision where the linter parses indented asterisk bullets inside blocks as malformed bold/emphasis markers.
|
||||
|
||||
## [[2.3.37]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.37) - 2026-06-02
|
||||
|
||||
### Added
|
||||
- **Programmatic Smart Injection (Option B)**: Replaced legacy full-document rewriting using Gemini Pro with a highly efficient programmatic Markdown injector. The new system uses Gemini Flash 3.5 to choose the target section header, while Python surgically inserts the link. This prevents 429 rate limit blocks and cuts down API costs by 95%.
|
||||
- **Persisted Raw Impact Score**: Added `impact_score` attribute to evaluations saved inside `data/inventory.yaml`, ensuring that cached resources retain their original AI classification scores.
|
||||
|
||||
### Fixed
|
||||
- **KeyError: 'impact_score'**: Implemented resilient fallback logic in the curation orchestrator to calculate `impact_score` from the `stars` attribute (e.g. `stars * 20`) for cached items that lack the raw `impact_score` field.
|
||||
|
||||
## [[2.3.36]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.36) - 2026-05-29
|
||||
|
||||
### Fixed
|
||||
- **Legal Disclaimer Duplication**: Removed duplicate/redundant line of text in README.md section 15.3.
|
||||
|
||||
## [[2.3.35]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.35) - 2026-05-28
|
||||
|
||||
### Added
|
||||
- **Grafana Observability Video**: Added the Viktor Farcic video `I Stopped Staring at Dashboards. AI Reads My Grafana Metrics Now.` to the V2 Video Hub under the "AI Agents and MCP" learning path.
|
||||
|
||||
## [[2.3.34]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.34) - 2026-05-28
|
||||
|
||||
### Added
|
||||
- **Link Provenance Tracking**: Added `addition_method` metadata attribute to `data/inventory.yaml` to differentiate between manually curated and automatically ingested links.
|
||||
- **Database Migration**: Migrated all 18,004 existing database entries to have `addition_method: manual` by default.
|
||||
- **Workflow & Optimizer Integration**: Programmed `src/agentic_curator.py` to mark automatically ingested resources as `automatic`, and updated `src/v2_optimizer.py` to default new V1 Markdown source resources to `manual`.
|
||||
|
||||
### Changed
|
||||
- **Documentation & Memory Systems**: Added documentation for `addition_method` in `README.md`, `GEMINI.md`, and `src/memory/health_learning.json`.
|
||||
|
||||
## [[2.3.32]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.32) - 2026-05-28
|
||||
|
||||
### Changed
|
||||
- **Arsys Logo Dark Mode Contrast**: Changed the Arsys logo fill color to a constant corporate electric sky blue (`#00a2e8`) inside the SVG, ensuring maximum contrast on both white (V1) and slate/black (V2) backgrounds.
|
||||
- **Removed Logo CSS Inversion**: Removed the dark mode CSS filter invert rule in `extra.css` to preserve branding color integrity.
|
||||
|
||||
## [[2.3.31]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.31) - 2026-05-28
|
||||
|
||||
### Changed
|
||||
- **Arsys Logo Dark Mode Adaptation**: Embedded light/dark prefers-color-scheme styles inside the Arsys SVG logo and added a CSS invert filter for the slate theme in `extra.css` to fix visibility in dark mode.
|
||||
|
||||
## [[2.3.30]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.30) - 2026-05-28
|
||||
|
||||
### Fixed
|
||||
- **Wikimedia Commons URL Correction**: Replaced the broken HTML error page (downloaded due to invalid hash pathing) with a valid vector SVG file by using the correct MD5 filename-derived directory structure (`8/88/Arsys_logo.svg`) on upload.wikimedia.org.
|
||||
|
||||
## [[2.3.29]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.29) - 2026-05-28
|
||||
|
||||
### Added
|
||||
- **Arsys Channel Integration**: Registered `https://www.youtube.com/@arsys` in `data/inventory.yaml` under `cloud_providers` (V2) and ordered to append at the end of V1 flat sequence.
|
||||
|
||||
### Fixed
|
||||
- **Video Hub Heading Level Fix**: Fixed a markdown linter error (MD001) in the generated video hub index by changing the heading increment from h3 to h2 (`## Learning Dimensions`).
|
||||
|
||||
## [[2.3.28]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.28) - 2026-05-28
|
||||
|
||||
### Changed
|
||||
- **Mandate 23 Documentation**: Updated `GEMINI.md` and `health_learning.json` to formally document the database-driven dual layout design of YouTube mosaics.
|
||||
|
||||
## [[2.3.27]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.27) - 2026-05-28
|
||||
|
||||
### Added
|
||||
- **Workflow Automation for Mosaic**: Configured the V2 Publisher workflow to execute `src/reorganize_mosaic.py` automatically on each run.
|
||||
|
||||
## [[2.3.26]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.26) - 2026-05-28
|
||||
|
||||
### Fixed
|
||||
- **Video Hub Index Heading Level Correction**: Adjusted generator code to prevent heading hierarchy lint failures.
|
||||
|
||||
## [[2.3.25]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.25) - 2026-05-28
|
||||
|
||||
### Added
|
||||
- **Database Migration for YouTube Mosaic**: Migrated YouTube channel mosaic configuration from the deprecated `youtube_channels_mosaic.yaml` to the unified monolithic `data/inventory.yaml` and refactored the layout generator to dynamically read from the database.
|
||||
|
||||
## [[2.3.24]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.24) - 2026-05-28
|
||||
|
||||
### Changed
|
||||
- **Restored V1 Flat YouTube Mosaic Layout**: Restored the flat list layout (11 channels per row, sorted by `order_v1`) on the V1 homepage, while preserving the advanced categorized V2 dashboard.
|
||||
|
||||
## [[2.3.23]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.23) - 2026-05-28
|
||||
|
||||
### Changed
|
||||
- **Quote Card HTML Structure**: Wrapped the clickable `quote-card-link` in a block-level `div` container to prevent the Markdown processor from wrapping the inline `a` link in a paragraph `<p>` tag. This ensures correct HTML parsing and restores the quote card's dynamic hover animations and transitions.
|
||||
|
||||
## [[2.3.22]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.22) - 2026-05-28
|
||||
|
||||
### Changed
|
||||
- **Showcase Image Conformance Footer Bar**: Replaced the absolute badge overlay with an elegant, responsive glassmorphic footer bar `.hero-showcase-footer` beneath the image. This bar contains the CNCF conformance badge alongside an explanatory caption about workload portability, ensuring that no text covers any part of the main showcase image.
|
||||
|
||||
## [[2.3.21]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.21) - 2026-05-28
|
||||
|
||||
### Changed
|
||||
- **Reordered V2 Homepage Header**: Reorganized the V2 home page layout, placing the large responsive CNCF conformance image showcase first, followed by Horatio's framed interactive quote card, and finally the four flex dashboard cards.
|
||||
- **Glassmorphic Quote Card**: Replaced the plain text quote with a styled, framed quote card featuring an interactive dashed border, a custom quote icon, and a glowing neon cyan hover state that links directly to Horatio Nelson Jackson's Wikipedia page.
|
||||
- **Enlarged Conformance Showcase**: Increased the max-width of the CNCF conformance wrapper to 1100px to ensure it remains as large as possible across all high-resolution devices.
|
||||
|
||||
## [[2.3.20]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.20) - 2026-05-27
|
||||
|
||||
### Changed
|
||||
- **CNCF Showcase Conformance Image Effects**: Added a glassmorphic wrapper `.hero-showcase-wrapper` to the main CNCF conformance image on the V2 homepage with hover scale effects (`1.03x`), brightness filters, a neon cyan shadow glow, and an interactive overlay badge.
|
||||
- **V2 Nav and Index Path Fixes**: Resolved broken internal references to `videos.md` in `v2-mkdocs.yml` and the strategic dimensions list by permanently updating the compiler to resolve paths to the modularised `./videos/index.md` location. Integrated MkDocs Material's `navigation.indexes` feature so that clicking the top-level "Agentic Video Hub" menu tab links directly to the Overview page (`videos/index.md`) without sub-navigation redundancy.
|
||||
|
||||
## [[2.3.19]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.19) - 2026-05-27
|
||||
|
||||
### Added
|
||||
- **Modularized Video Hub**: Replaced the legacy monolithic `v2-docs/videos.md` with a structured, multi-page directory (`v2-docs/videos/`) separating video resources into AI Agents, DevOps/IaC/SRE, Cloud Native Core, and Fundamentals learning paths.
|
||||
- **Robust Slugification and Header Cleaning**: Upgraded the slugification and header normalization logic to ensure 100% compatibility with MkDocs anchor resolution, stripping commas, parentheses, slashes, and special symbols to prevent broken internal links.
|
||||
- **Monthly Video Automation Schedule**: Configured a monthly cron trigger (`0 6 1 * *`) in the V2 Video Hub Builder GitHub action to automate video curation and portal updates.
|
||||
|
||||
### Changed
|
||||
- **Persisted Hero Dashboard Cards**: Integrated the 4 glassmorphic interactive cards directly into the `v2_optimizer.py` compilation script for `v2-docs/index.md`, preventing them from being overwritten during V2 rendering cycles and updating the video link to `./videos/index.html`.
|
||||
|
||||
## [[2.3.18]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.18) - 2026-05-27
|
||||
|
||||
### Added
|
||||
- **4-Card Hero Dashboard**: Expanded the V2 homepage header from two to four interactive dashboard cards, adding entry points for "AI & MCP Agents" (with custom purple glow) and "Agentic Video Hub" (with custom pink glow). Improved visual layout structure and updated all card links to point directly to `.html` destinations to prevent 404 compilation target errors.
|
||||
|
||||
## [[2.3.17]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.17) - 2026-05-27
|
||||
|
||||
### Changed
|
||||
- **V2 Header Cards Optimization**: Fixed broken `.md` targets in raw HTML header cards by pointing them to compiled `.html` pages. Upgraded card sizing to use a responsive flex layout (`flex: 1; max-width: 280px; min-width: 200px;`) with increased padding and added visual hover highlight states on card icons matching the mosaic aesthetics.
|
||||
|
||||
## [[2.3.16]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.16) - 2026-05-27
|
||||
|
||||
### Changed
|
||||
- **V2 Homepage Interactive Header Badges**: Converted the top inline Kubernetes and Hero Car image links on the V2 index page into styled, responsive glassmorphic cards. Kubernetes links to the internal curated Kubernetes resources section rather than the external homepage, improving contextual navigation.
|
||||
|
||||
## [[2.3.15]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.15) - 2026-05-27
|
||||
|
||||
### Changed
|
||||
- **Homepage YouTube Mosaic Scaling & Transitions**: Refactored the icon layout styling to use uniform responsive sizing (48px) instead of viewport percentage widths. Added hover micro-animations (scale-up scale factor 1.15x and brightness filters) for both light and dark modes to enhance aesthetic premium quality.
|
||||
|
||||
## [[2.3.14]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.14) - 2026-05-27
|
||||
|
||||
### Changed
|
||||
- **Kyndryl YouTube Channel Categorization**: Moved the Kyndryl channel from the Tech E-Learning category to the Cloud Providers & Core Infrastructure category in the homepage mosaic mapping database and files.
|
||||
|
||||
## [[2.3.13]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.13) - 2026-05-27
|
||||
|
||||
### Changed
|
||||
- **Homepage YouTube Mosaic Visual Borders**: Replaced category text headers with thin colored outline borders around each channel group inside the mosaic. This restores a continuous, symmetric flow of clickable icons while visually highlighting the different technological categories.
|
||||
|
||||
## [[2.3.12]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.12) - 2026-05-27
|
||||
|
||||
### Added
|
||||
- **Homepage YouTube Mosaic Reorganization**: Reorganized the visual channels mosaic on V1 and V2 homepages into logical technology categories (e.g., AI & Advanced Tech, Cloud Providers, Cloud Native, etc.).
|
||||
- **Mosaic Database Schema**: Introduced `data/youtube_channels_mosaic.yaml` to catalog and preserve the channel classification directly in the repository configuration.
|
||||
|
||||
## [[2.3.11]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.11) - 2026-05-27
|
||||
|
||||
### Added
|
||||
- **Microsoft Reactor YouTube Channel**: Added Microsoft Reactor to the homepage channels mosaic in V1 and V2, moving Playwright to its own row at the bottom of the mosaic.
|
||||
|
||||
## [[2.3.10]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.10) - 2026-05-27
|
||||
|
||||
### Added
|
||||
- **Agentic DevOps Live Playlist**: Integrated the Microsoft/GitHub "Agentic DevOps Live" series into the V2 Video Hub under the AI and Future Operations category, detailing SRE agents, Copilot App Mod agents, and autonomous development loops.
|
||||
|
||||
## [[2.3.9]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.9) - 2026-05-27
|
||||
|
||||
### Added
|
||||
- **VS Code Dev Tunnels Video**: Integrated Gisela Torres' tutorial on VS Code Dev Tunnels into the V2 Video Hub, highlighting the secure remote access capabilities and developer productivity benefits. [SPANISH CONTENT]
|
||||
|
||||
## [[2.3.8]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.8) - 2026-05-27
|
||||
|
||||
### Added
|
||||
- **Red Hat Summit 2026 Video**: Integrated the Red Hat Summit 2026 interview with Fran Heeran into the Video Hub, detailing the architectural shift of telecommunications providers to unified cloud-native networks using OpenShift Virtualization.
|
||||
|
||||
## [[2.3.7]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.7) - 2026-05-26
|
||||
|
||||
### Fixed
|
||||
- **GitHub Actions Version Hardening**: Restored and upgraded all 15 workflows to use verified, true latest stable major versions (v6/v5/v8) across the entire CI/CD pipeline, ensuring maximum stability and security.
|
||||
- **Deployment Workflow Reliability**: Resolved transient "Failed to download" infrastructure errors in the "06.1. Final Portal Deploy" workflow by aligning with official GitHub Action releases and latest stable tags.
|
||||
|
||||
## [[2.3.6]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.6) - 2026-05-26
|
||||
|
||||
### Changed
|
||||
- **Deployment Documentation Sync**: Updated `README.md` to reflect the new deployment workflow name ("06.1. Final Portal Deploy") and its stabilized trigger configuration.
|
||||
- **Workflow Stabilization**: Renamed the deployment workflow file to `06.deploy_final.yml` to resolve persistent GitHub trigger issues and ensure reliable production releases.
|
||||
|
||||
## [[2.3.5]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.5) - 2026-05-26
|
||||
|
||||
### Added
|
||||
- **Visual Branding Expansion**: Integrated the official **Playwright** YouTube channel into the visual branding mosaic in both V1 and V2 index pages.
|
||||
- **Visual Asset Integration**: Optimized and integrated the high-resolution logo for the Playwright channel.
|
||||
|
||||
## [[2.3.4]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.4) - 2026-05-25
|
||||
|
||||
### Removed
|
||||
- **Redundant SEO Mitigation Assets**: Deleted the custom `404.md` page in the V2 portal. Under the Hybrid SEO-First architecture, legacy root URLs are now valid (serving V1 content), making the specialized rescue page unnecessary.
|
||||
|
||||
## [[2.3.3]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.3) - 2026-05-25
|
||||
|
||||
### Fixed
|
||||
- **Navigation Loop**: Corrected the "Back to V1" link to point specifically to `https://nubenetes.com/v1/`. This avoids the automatic redirect at the domain root, allowing users to actually reach the exhaustive archive.
|
||||
|
||||
## [[2.3.2]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.2) - 2026-05-25
|
||||
|
||||
### Changed
|
||||
- **Hybrid Sync Standardization**: Unified navigation labels and URLs across `v2-mkdocs.yml` and `src/v2_optimizer.py`. The "Back to V1" link now consistently points to the domain root to leverage SEO-protected legacy paths.
|
||||
|
||||
## [[2.3.1]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.1) - 2026-05-25
|
||||
|
||||
### Fixed
|
||||
- **Deployment Resilience**: Resolved a recursive copy error in the GitHub Pages deployment workflow by implementing a temporary staging area for the V1 build process.
|
||||
|
||||
## [[2.3.0]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.3.0) - 2026-05-25
|
||||
|
||||
### Added
|
||||
- **Hybrid SEO-First Architecture**: Implemented a sophisticated dual-version deployment strategy. V1 is restored to the domain root (`/`) to preserve 6+ years of SEO authority and deep-links, while a root-level redirect guides human traffic to the modern V2 Elite Portal at `/v2/`.
|
||||
|
||||
## [[2.2.4]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.2.4) - 2026-05-25
|
||||
|
||||
### Changed
|
||||
- **Governance & Documentation Sync**: Performed a comprehensive update of `README.md`, `GEMINI.md`, and local session memory to reflect the new architectural standards (V2 at Root), workflow hardening (rebase resilience), and mandatory PR-based governance for production deployments.
|
||||
|
||||
## [[2.2.3]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.2.3) - 2026-05-25
|
||||
|
||||
### Fixed
|
||||
- **Redirect Collision Resolution**: Removed conflicting HTML redirects in the V2 portal that were blocking access to new Elite content with the same filenames as legacy pages.
|
||||
- **SEO Mitigation Refinement**: Shifted to a "Smart 404" only strategy for the root domain, ensuring that URLs like `kubernetes.html` serve the updated V2 content while missing legacy links are elegantly handled by the custom 404 page.
|
||||
|
||||
## [[2.2.2]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.2.2) - 2026-05-25
|
||||
|
||||
### Added
|
||||
- **SEO Mitigation (Smart 404)**: Implemented a custom 404 page in the V2 portal (`404.md`) to guide users from broken historical links to the new V1 archive location.
|
||||
- **HTML Redirects**: Integrated the `mkdocs-redirects` plugin and configured 301-style HTML redirects for the top 12 legacy URLs, preserving search engine authority and user experience during the root migration.
|
||||
|
||||
## [[2.2.1]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.2.1) - 2026-05-25
|
||||
|
||||
### Changed
|
||||
- **Default Landing Page (V2 at Root)**: Promoted the Nubenetes Elite Portal (V2) to the root of the domain (`https://nubenetes.com/`) to provide a modern, AI-curated default experience.
|
||||
- **V1 Archive Relocation**: Moved the exhaustive V1 archive to the `/v1/` subdirectory (`https://nubenetes.com/v1/`).
|
||||
- **Navigation Synchronization**: Updated all navigation links and announce banners across both versions to ensure seamless switching between the Elite Portal and the Exhaustive Archive.
|
||||
- **Workflow Realignment**: Reconfigured the GitHub Pages deployment pipeline to support the new directory structure while maintaining zero-downtime synchronization.
|
||||
|
||||
## [[2.2.0]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.2.0) - 2026-05-25
|
||||
|
||||
### Fixed
|
||||
- **Workflow Resilience (Race Conditions)**: Implemented a mandatory `git pull --rebase` strategy across all five automated workflows (Metadata, AI Curator, Video Hub, Publisher, and README Sync). This prevents "rejected push" errors by allowing concurrent bot executions to automatically integrate sibling commits before pushing back to the `develop` branch.
|
||||
|
||||
## [[2.1.9]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.1.9) - 2026-05-25
|
||||
|
||||
### Changed
|
||||
- **Visual Identity (Ultra-Visible "N" Favicon)**: Redesigned the favicon to follow the high-visibility patterns of X.com, GitHub, and LinkedIn. The new design features a massive, bold cyan "N" on a solid black background, maximizing clarity and brand recognition in browser tabs.
|
||||
- **Index Brand Restoration**: Restored the original "Gemini construction car" as the primary hero image in the V2 portal's header, maintaining the project's established visual identity while separating it from the functional favicon.
|
||||
|
||||
## [[2.1.8]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.1.8) - 2026-05-25
|
||||
|
||||
### Fixed
|
||||
- **Configuration Integrity**: Fixed a YAML syntax error in `mkdocs.yml` (corrupted trailing line) that was causing GitHub Pages deployment failures.
|
||||
|
||||
## [[2.1.7]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.1.7) - 2026-05-25
|
||||
|
||||
### Changed
|
||||
- **Visual Identity (Ultra-Visible Favicon)**: Replaced the complex favicon with an ultra-minimalist, high-contrast design (Cyan "N" on dark background) to ensure maximum visibility in browser tabs, following the design patterns of X, GitHub, and LinkedIn.
|
||||
- **Index Branding Restoration**: Reverted the header image on the V2 index page to the "Gemini construction car" (now standardized as `hero-car.png`) to maintain the project's established visual impact while keeping a separate, cleaner icon for navigation tabs.
|
||||
|
||||
## [[2.1.6]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.1.6) - 2026-05-25
|
||||
|
||||
### Changed
|
||||
- **Visual Identity (Custom Logo)**: Replaced the generic car icon with a custom-engineered minimalist logo ("Nubenetes Nano Logo"). The new design features a high-contrast Cyber Cloud vehicle with Kubernetes helm wheels, ensuring superior perception and brand recognition as a favicon.
|
||||
- **Asset Optimization**: Standardized the new logo as an SVG source and a 256x256 transparent PNG for cross-platform clarity.
|
||||
|
||||
## [[2.1.5]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.1.5) - 2026-05-25
|
||||
|
||||
### Changed
|
||||
- **Automated Workflow Optimization**: Refactored V2 ecosystem workflows (Metadata, AI Curator, Video Hub, and Publisher) to utilize direct git push to the `develop` branch instead of creating redundant Pull Requests. This eliminates manual overhead and confusion while ensuring derived content is seamlessly synchronized using `[skip ci]` flags.
|
||||
- **Workflow Observability**: Integrated GitHub Artifacts for automated architecture audits and decision matrices, replacing redundant PR comments.
|
||||
|
||||
## [[2.1.4]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.1.4) - 2026-05-25
|
||||
|
||||
### Added
|
||||
- **Leading AI Channels Mosaic**: Expanded the visual branding mosaic in V1 and V2 portals to include the official YouTube channels for **Google Gemini**, **Google DeepMind**, **Anthropic**, **Microsoft Copilot**, **OpenAI**, and **Meta AI**.
|
||||
- **Visual Asset Integration**: Optimized and integrated high-resolution logos for the new AI channels to maintain high-density visual standards.
|
||||
|
||||
## [[2.1.3]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.1.3) - 2026-05-25
|
||||
|
||||
### Fixed
|
||||
- **Definitive AVM Video Correction**: Applied a surgical fix to the "Azure Verified Modules" video metadata in the V2 portal and inventory. Corrected the title and summary to accurately reflect the session's focus on Spec-Driven Development, the "Spec Kit" framework, and Well-Architected Azure workloads using GitHub Copilot.
|
||||
|
||||
## [[2.1.2]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.1.2) - 2026-05-25
|
||||
|
||||
### Added
|
||||
- **Visual Branding Expansion**: Integrated **ITOpsTalk** (Microsoft Azure) and **Google Cloud Tech** official channels into the visual branding mosaic in both V1 and V2 index pages.
|
||||
- **Azure Verified Modules (AVM) Integration**: Added the technical session on building secure Azure workloads using AVM and GitHub Copilot to the V2 Elite Video Hub. The summary highlights spec-driven development and the "Spec Kit" framework for reliable AI-assisted IaC.
|
||||
|
||||
## [[2.1.1]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.1.1) - 2026-05-25
|
||||
|
||||
### Added
|
||||
- **Stanford CS229 LLM Session**: Integrated the Stanford CS229 lecture on "Building Large Language Models" into the V2 Elite Video Hub. The architectural summary focuses on LLM orchestration, alignment (DPO/RLHF), and systems optimization for 2026 AI infrastructure.
|
||||
|
||||
## [[2.1.0]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.1.0) - 2026-05-25
|
||||
|
||||
### Added
|
||||
- **Dual-Logo Branding Header**: Integrated a new dual-logo header in the V2 portal, featuring the transparent Kubernetes logo alongside the modern Gemini construction car icon. The Gemini icon serves as a shortcut to the project's introduction page.
|
||||
|
||||
### Changed
|
||||
- **Visual Balance**: Resized visual assets to ensure architectural symmetry between the Kubernetes and Gemini logos in the portal's main entry point.
|
||||
|
||||
## [[2.0.9]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.0.9) - 2026-05-25
|
||||
|
||||
### Changed
|
||||
- **Visual Optimization**: Resized the transparent Kubernetes logo to 150px to ensure it remains subtle and professional as a header icon, matching the visual balance of the original design while maintaining modern transparency.
|
||||
|
||||
## [[2.0.8]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.0.8) - 2026-05-25
|
||||
|
||||
### Fixed
|
||||
- **Terminology Standardization**: Standardized the use of "AI" across the entire V2 ecosystem, updating the builder script (`src/v2_optimizer.py`), global configurations (`data/special_assets.yaml`), and all related documentation pages. This prevents the redundant "AI and Artificial Intelligence" title from reappearing during portal regeneration.
|
||||
|
||||
## [[2.0.7]](https://github.com/nubenetes/awesome-kubernetes/releases/tag/v2.0.7) - 2026-05-25
|
||||
|
||||
### Fixed
|
||||
|
||||
@@ -55,13 +55,17 @@ This file contains the accumulated instructions and long-term vision for the aut
|
||||
* `source_provenance`: Identifies the origin of the discovery (Twitter, RSS, Manual).
|
||||
* `social_preview_url`: OpenGraph/Social images to enrich the V2 visual experience.
|
||||
* `mentions_count`: Tracks resource popularity/rediscovery frequency.
|
||||
* `addition_method`: Tracks the resource addition origin ('manual' or 'automatic') to facilitate scaling metrics.
|
||||
- **Persistence (MANDATORY)**: Every AI agent and workflow MUST load this file at startup, update it, and INJECT the modified YAML into the final PR payload if any change is detected. Discarding the database during a workflow run is a CRITICAL FAILURE.
|
||||
- **Exhaustive Initialization**: The system supports a `FORCE_FULL_CHECK` environment variable to bypass all caches (e.g., 21-day health cache) and force a full re-validation and re-enrichment of the entire 17k+ link archive.
|
||||
- **No Trusted Bypassing**: All domains, including high-trust ones (GitHub, Google, AWS), MUST be verified for link validity. Trusted status only grants a lower priority for aggressive scraper rotation, not a bypass for existence checks.
|
||||
- **URL Protocol Integrity**: All URLs MUST use the complete and correct protocol prefix (`https://` or `http://`). AI agents MUST ensure that automated edits or mass cleanup tasks NEVER corrupt the protocol (e.g., by reducing `https://` to `https:/`).
|
||||
- **Manual Priority**: AI agents MUST NOT overwrite existing manual descriptions or stars in the V1 archive files. Enrichment is strictly for the YAML database and the V2 portal.
|
||||
|
||||
23. **YouTube Mosaic Exemption**: In `docs/index.md` and `v2-docs/index.md`, only the primary visual mosaic block (the specific `<center>` block containing the highest density of YouTube links) is exempt from automated health checks and MUST NOT be included in `data/inventory.yaml`. This is a fixed visual asset. However, all other YouTube resources in these files—including links appearing before the mosaic and those in the collapsible "Top Videos" section—MUST be checked by the link cleaner and properly tracked in the inventory.
|
||||
23. **YouTube Mosaic Management & Dual Layout Mandate**: The YouTube channels visual mosaic in `docs/index.md` (V1) and `v2-docs/index.md` (V2) must be generated dynamically from the centralized metadata database `data/inventory.yaml` (using the `youtube_mosaic` metadata block). The layouts for V1 and V2 must remain strictly distinct to satisfy the dual-edition mandate:
|
||||
- **V1 Exhaustive Layout**: Must be rendered as a single flat, historically ordered sequence of channel logos (11 per row) using simple inline width styling (`{: style="width:7%"}`). Newly discovered channels must be appended at the end of the flat list (ordered using the `youtube_mosaic.order_v1` field).
|
||||
- **V2 Elite Layout**: Must be rendered as an advanced categorized dashboard grouped into custom border-outlined card containers with neon colors corresponding to technical dimensions, optimized dimensions (`width: 48px; height: 48px`), and class hooks (`.channel-logo`) (ordered using the `youtube_mosaic.order_v2` field).
|
||||
- **Automation & Persistence**: The automated Publisher and Optimizer bot workflows must execute `src/reorganize_mosaic.py` to regenerate both visual blocks from the database during every pipeline run, ensuring the layout difference persists over the entire lifecycle.
|
||||
|
||||
24. **Canonical URL Normalization & Semantic Deduplication**: To prevent duplication and fragmented metadata, all agents MUST normalize URLs before any inventory operation.
|
||||
- **Tracking Stripping**: Systematically remove UTM parameters, social media trackers (X.com, LinkedIn), and URL fragments (except technical ones).
|
||||
@@ -245,11 +249,14 @@ To maintain the integrity of the archive and ensure the AI agents operate correc
|
||||
|
||||
1. **Branch Hierarchy**:
|
||||
* `master`: Read-only for contributors/bots. Restricted to repository owner only.
|
||||
* `develop`: The only valid target for Pull Requests.
|
||||
2. **Pull Request Policy**:
|
||||
* AI agents MUST always target `develop`.
|
||||
* Manual contributions (human PRs) targeting `master` must be automatically or manually redirected to `develop`.
|
||||
3. **Owner-Only Merges**: Only the repository owner has the authority to merge `develop` into `master` after verifying the visual health dashboard and metrics.
|
||||
* `develop`: The only valid target for direct AI commits and Pull Requests.
|
||||
2. **Strict Pull Request Policy (No Manual Merges)**:
|
||||
* AI agents MUST always target `develop` for their work.
|
||||
* AI agents MUST NEVER perform manual CLI merges (e.g., `git merge develop`) into `master` or `main`.
|
||||
* To promote changes to `master`, AI agents MUST open a formal Pull Request from `develop` to `master` (e.g., using `gh pr create`) and **STOP**, waiting for the repository owner to review and merge via the GitHub UI. This ensures CI/CD workflows run correctly.
|
||||
3. **Owner-Only Merges & Tagging**:
|
||||
* Only the repository owner has the authority to merge `develop` into `master` after verifying the visual health dashboard and metrics.
|
||||
* Creation of version tags (`git tag`) MUST only occur AFTER the PR has been successfully merged into `master` by the owner.
|
||||
|
||||
## 📝 README Synchronization & Maintenance Protocols
|
||||
|
||||
@@ -309,7 +316,7 @@ The bot must rotate between profiles to avoid detection:
|
||||
- **V1 Integrity Restored**: Recovered all V1 files in `docs/` to ensure original descriptive content and images are preserved.
|
||||
- **V2 Navigation Fixed**: Converted V2 top bar to a flat structure for better UX and link stability.
|
||||
- **Relative Asset Routing**: Updated all V2 image and configuration paths to point relatively to `../docs/` to avoid asset duplication.
|
||||
- **Rendering & Path Resolution**: Implemented `<center markdown="1">` and `use_directory_urls: false` across V1 and V2 to resolve persistent image path breakage and ensure proper Markdown rendering within HTML tags.
|
||||
- **Rendering & Path Resolution**: Restored `use_directory_urls: true` to prioritize SEO and clean URLs. Standardized on root-relative paths for manual HTML assets and `<center markdown="1">` for Markdown content within HTML blocks to prevent asset breakage across directory levels.
|
||||
- **Optimizer Alignment**: Hardened `src/v2_optimizer.py` to enforce these architectural rules (flat navigation, relative paths, and resilient V1 content extraction).
|
||||
- **Incremental Elite Engine**: Implemented a sophisticated V2 sync strategy using `data/centralized YAML inventory`.
|
||||
- **Automatic Detection**: The `agentic_v2_builder.yml` workflow now triggers automatically whenever `docs/` changes or after a curation run.
|
||||
@@ -357,16 +364,16 @@ The bot must rotate between profiles to avoid detection:
|
||||
- **Announce Banner**: Added a global announcement banner to V1 directing users to the V2 Elite Portal.
|
||||
- **Resilient Architectural Refinements (Phase 2)**:
|
||||
- **Fast-Track V2 Elite Builder**: Optimized the builder to run sequentially for maximum stability and simplicity, bypassing the overhead of distributed systems.
|
||||
- **Pip Caching**: Implemented `cache: pip` across all 5 workflows to drastically reduce startup times and compute minutes.
|
||||
- **Contribution Template (PR Guardian)**: Enforced strict GEMINI mandate compliance at the PR creation stage via `PULL_REQUEST_TEMPLATE.md`.
|
||||
- **Exponential Backoff Resilience**: Upgraded the `call_gemini_with_retry` engine with the `tenacity` library, allowing intelligent pausing (4s, 8s, 16s) to gracefully absorb 429 Rate Limits before triggering the ultimate exit code 42 Circuit Breaker.
|
||||
- **Ultra-Fast V2 Render Mode**: Optimized the `render-and-pr` stage of the V2 pipeline (`--render-only`) to implement an absolute short-circuit, completely bypassing redundant HTTP health checks, GitHub API metadata fetching, and AI agent evaluation loops. This leverages the pre-computed YAML inventory to assemble the portal instantaneously.
|
||||
- **Flash-First Architecture Transition (May 2026)**:
|
||||
- **Throughput Optimization**: Successfully transitioned to a Flash-First architecture, increasing Fast-Track batch sizes to 100 resources.
|
||||
- **Resilience Hardening**: Improved error handling to ensure Rate-Limit (429) events trigger the Circuit Breaker instead of silent loops, preserving API integrity.
|
||||
- **Efficiency Gains**: Reduced expected execution time for 10k+ resources by >60% through optimized RPM/TPM management and strategic safety delays.
|
||||
|
||||
|
||||
- **Workflow Hardening (Race Condition Fix)**: Implemented a mandatory `git pull --rebase` strategy across all automated bots to prevent concurrent push failures.
|
||||
- **Ultra-Visible Branding**: Standardized on a minimalist Cyan "N" favicon (`favicon-ultra.png`) and restored the original hero car imagery to the V2 index.
|
||||
- **O'Reilly Journey Builder**: Refined the O'Reilly-style technical hierarchy in the V2 portal to ensure a logical knowledge progression from foundations to advanced internals.
|
||||
- **Platinum SEO Mitigation**: Implemented a "Smart 404" rescue system and a **Hybrid SEO-First Architecture** that preserves V1 at the root while redirecting human traffic to the V2 Elite Portal.
|
||||
* **May 2026**: **Hybrid SEO-First Architecture Reversion**:
|
||||
- **V1 Restoration (Root)**: Restored the V1 Archive to the root (`/`) to protect historical deep-links and SEO authority.
|
||||
- **V2 Relocation (/v2/)**: Moved the Elite Portal to a dedicated subdirectory.
|
||||
- **Smart Root Redirect**: Implemented an automatic meta-refresh in the root `index.html` to guide human visitors to the V2 experience without breaking search engine indices.
|
||||
- **V1 Fallback (/v1/)**: Duplicated the archive to `/v1/` for explicit navigation.
|
||||
- **V2 Index Metrics Protocol**: The "Knowledge Architecture and AI Coverage Status" report in the V2 index MUST include a direct comparison between V1 and V2 inventory. This report MUST display: 1. **V1 Base Inventory** (Total resources in the master archive), 2. **V2 Elite Selection** (Count of candidates and the resulting density ratio), 3. **AI Enrichment Coverage**, and 4. **GitHub Metadata Coverage**. This ensures transparency in the knowledge distillation process.
|
||||
- **Redundancy-Free Branding**: To ensure professional UI density, the V2 Portal header MUST NOT repeat the "Nubenetes" brand. The title MUST follow the pattern: "Nubenetes Elite Portal (V2) | Awesome Kubernetes and Cloud".
|
||||
- **Decoupled Workflow Architecture**: The Agentic V2 ecosystem MUST utilize a decoupled micro-workflow structure (Health Monitor, Metadata Engine, AI Curator, and Publisher) to optimize compute quotas and minimize Gemini token consumption. Any update to the V2 rendering logic MUST use the `--render-only` flag in the Publisher pipeline to maintain execution speed.
|
||||
to maintain execution speed.
|
||||
|
||||
@@ -65,6 +65,7 @@
|
||||
* [9.6. Automated Mandate Auditing](#96-automated-mandate-auditing)
|
||||
* [9.7. Multi-Part Reporting Engine](#97-multi-part-reporting-engine)
|
||||
* [9.8. Workflow UI Auto-Sync](#98-workflow-ui-auto-sync)
|
||||
* [9.9. Resilience and Massive Recovery (The 6-Hour Rule)](#99-resilience-and-massive-recovery-the-6-hour-rule)
|
||||
10. [10. Branching Strategy and Lifecycle](#10-branching-strategy-and-lifecycle)
|
||||
11. [11. Contributing to the Archive](#11-contributing-to-the-archive)
|
||||
* [How to Contribute](#how-to-contribute)
|
||||
@@ -133,14 +134,14 @@ Additionally, as of May 2026, Nubenetes has reached the **Platinum Operational T
|
||||
## 2. Repository Metrics and Evolution
|
||||
|
||||
### 2.1. The "Heart" of Nubenetes
|
||||
(Stats as of 2026-05-25)
|
||||
(Stats as of 2026-06-15)
|
||||
|
||||
<!-- HEART_STATS_START -->
|
||||
| Metric | Value |
|
||||
| :--- | :--- |
|
||||
| **Total Technical Resources (Links)** | **17982+** |
|
||||
| **Specialized MD Pages** | **161** |
|
||||
| **Total Commits** | **5409+** |
|
||||
| **Total Technical Resources (Links)** | **18584+** |
|
||||
| **Specialized MD Pages** | **162** |
|
||||
| **Total Commits** | **5887+** |
|
||||
| **Primary AI Engine** | **Google Gemini (Agentic)** |
|
||||
<!-- HEART_STATS_END -->
|
||||
|
||||
@@ -150,16 +151,16 @@ Top 10 categories by link volume in the exhaustive V1 archive.
|
||||
<!-- TOP_CATEGORIES_START -->
|
||||
| Category (Markdown Page) | Total Links |
|
||||
| :--- | :---: |
|
||||
| [Kubernetes](docs/kubernetes.md) | 1271 |
|
||||
| [Kubernetes Tools](docs/kubernetes-tools.md) | 808 |
|
||||
| [Terraform](docs/terraform.md) | 712 |
|
||||
| [Azure](docs/azure.md) | 608 |
|
||||
| [Demos](docs/demos.md) | 596 |
|
||||
| [Git](docs/git.md) | 521 |
|
||||
| [Jenkins](docs/jenkins.md) | 448 |
|
||||
| [Devsecops](docs/devsecops.md) | 409 |
|
||||
| [Introduction](docs/introduction.md) | 387 |
|
||||
| [Managed Kubernetes In Public Cloud](docs/managed-kubernetes-in-public-cloud.md) | 376 |
|
||||
| [Kubernetes Tools](docs/kubernetes-tools.md) | 768 |
|
||||
| [Kubernetes](docs/kubernetes.md) | 711 |
|
||||
| [Terraform](docs/terraform.md) | 414 |
|
||||
| [Demos](docs/demos.md) | 363 |
|
||||
| [Azure](docs/azure.md) | 296 |
|
||||
| [Git](docs/git.md) | 265 |
|
||||
| [Visual Studio](docs/visual-studio.md) | 262 |
|
||||
| [Monitoring](docs/monitoring.md) | 254 |
|
||||
| [Devsecops](docs/devsecops.md) | 232 |
|
||||
| [Ocp4](docs/ocp4.md) | 224 |
|
||||
<!-- TOP_CATEGORIES_END -->
|
||||
|
||||
### 2.3. Historical Growth (Commits and References)
|
||||
@@ -178,7 +179,7 @@ The growth of Nubenetes reflects the acceleration of the Cloud Native ecosystem.
|
||||
| 6 | 2023 | 30 | 123 | Maintenance & Refinement |
|
||||
| 7 | 2024 | 53 | 218 | Curation Strategy Pivot |
|
||||
| 8 | 2025 | 5 | 20 | Stability & Research Phase |
|
||||
| 9 | 2026 | 1850 | 7,640 | **Agentic AI Surge** (May 2026 Inception) |
|
||||
| 9 | 2026 | 2328 | 9,614 | **Agentic AI Surge** (May 2026 Inception) |
|
||||
<!-- ANNUAL_GROWTH_END -->
|
||||
|
||||
<!-- ANNUAL_CHART_START -->
|
||||
@@ -193,9 +194,9 @@ config:
|
||||
xychart-beta
|
||||
title "Nubenetes Annual Growth Metrics (2018–2026)"
|
||||
x-axis ["2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026"]
|
||||
y-axis "Volume (Commits / Estimated New Refs)" 0 --> 9000
|
||||
bar [1445, 586, 8449, 2193, 1660, 123, 218, 20, 7640]
|
||||
bar [350, 142, 2046, 531, 402, 30, 53, 5, 1850]
|
||||
y-axis "Volume (Commits / Estimated New Refs)" 0 --> 10000
|
||||
bar [1445, 586, 8449, 2193, 1660, 123, 218, 20, 9614]
|
||||
bar [350, 142, 2046, 531, 402, 30, 53, 5, 2328]
|
||||
```
|
||||
<!-- ANNUAL_CHART_END -->
|
||||
|
||||
@@ -204,7 +205,8 @@ xychart-beta
|
||||
| Month | Commits | Est. New Refs | Status |
|
||||
| :--- | :---: | :---: | :--- |
|
||||
| 2026-04 | 25 | 103 | Active Curation |
|
||||
| 2026-05 | 1825 | 7,537 | **Agentic Inception (Gemini Era)** |
|
||||
| 2026-05 | 2101 | 8,677 | **Agentic Inception (Gemini Era)** |
|
||||
| 2026-06 | 202 | 834 | Active Curation |
|
||||
<!-- MONTHLY_SURGE_END -->
|
||||
|
||||
### 2.4. Content Distribution and Semantic Clustering
|
||||
@@ -217,7 +219,7 @@ This chart shows the high-level distribution across the primary domains of Cloud
|
||||
<!-- PILLAR_CHART_START -->
|
||||
```mermaid
|
||||
pie title Nubenetes Major Ecosystem Pillars
|
||||
"Specialized Topics" : 3582
|
||||
"Specialized Topics" : 4184
|
||||
"Kubernetes Ecosystem" : 3500
|
||||
"Developer Ecosystem" : 3000
|
||||
"Public/Private Cloud" : 2500
|
||||
@@ -238,10 +240,10 @@ Reflecting Nubenetes' mission of global access while maintaining technical Engli
|
||||
<!-- SUB_ECO_CHART_START -->
|
||||
```mermaid
|
||||
pie title Linguistic Diversity (Global Access)
|
||||
"English" : 16183
|
||||
"Spanish" : 1078
|
||||
"French" : 179
|
||||
"Others" : 539
|
||||
"English" : 16725
|
||||
"Spanish" : 1115
|
||||
"French" : 185
|
||||
"Others" : 557
|
||||
```
|
||||
<!-- SUB_ECO_CHART_END -->
|
||||
|
||||
@@ -284,24 +286,24 @@ The Nubenetes ecosystem utilizes a multi-layered defense and performance archite
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph "Phase 1: Discovery & Rescue"
|
||||
A["X.com/RSS Feeds"] --> B["Agentic Discoverer"]
|
||||
A["X.com / RSS Feeds"] --> B["Agentic Discoverer"]
|
||||
B --> C{"Health Pulse"}
|
||||
C -- "Dead" --> D["MCP Web Grounding"]
|
||||
C -- "Dead" --> D["MCP Web<br>Grounding"]
|
||||
D -- "Rescued" --> E["Unified Inventory"]
|
||||
C -- "Alive" --> E
|
||||
end
|
||||
|
||||
subgraph "Phase 2: Intelligent Optimization"
|
||||
E --> F["Gemini AI Curation"]
|
||||
F --> G["V2 Elite selection"]
|
||||
E --> F["Gemini AI<br>Curation"]
|
||||
F --> G["V2 Elite<br>Selection"]
|
||||
G --> H["Maturity Tagging"]
|
||||
end
|
||||
|
||||
subgraph "Phase 3: Hardened CI/CD"
|
||||
H --> I["Concurrency Guard"]
|
||||
I --> J["[skip ci] Loop Prevention"]
|
||||
J --> K["Dependency & Playwright Caching"]
|
||||
K --> L["Native GH Pages Deployment"]
|
||||
H --> I["Concurrency<br>Guard"]
|
||||
I --> J["[skip ci]<br>Loop Prevention"]
|
||||
J --> K["Dependency &<br>Playwright Caching"]
|
||||
K --> L["Native GH Pages<br>Deployment"]
|
||||
end
|
||||
|
||||
style I fill:#f96,stroke:#333,stroke-width:2px
|
||||
@@ -324,7 +326,7 @@ To ensure maximum throughput and industrial-grade precision, Nubenetes uses a pr
|
||||
- **Double-Evidence Synthesis Protocol**: Agents are mandated to contrast 'Curator Insight' (from original discovery) with 'Live Technical Grounding' (from search/MCP) before finalizing any technical summary.
|
||||
- **Real-time Web Grounding (MCP-Style)**: For high-fidelity tasks, the engine activates **Google Search Grounding**. This allows the AI to verify technical maturity, site migrations, and official documentation in real-time, providing a live data filter for all decisions.
|
||||
- **Smart Batching (Anti-429)**: Instead of individual calls, the system groups up to **25 resources into high-precision batches**. This optimizes grounding efficiency and minimizes rate limits.
|
||||
- **Dynamic Model Selection**: The system automatically toggles between **Gemini Pro** (for auditing and research) and **Gemini Flash** (for broad analysis).
|
||||
- **Dynamic Model Selection & Programmatic Injection (Option B)**: The system automatically toggles between **Gemini Pro** (for auditing and research) and **Gemini Flash** (for broad analysis and link insertion planning). Actual link injections are performed programmatically in Python to ensure 0% document corruption and zero rate-limit blocks.
|
||||
- **Global Back-off & Tier-down**: Automatic exponential back-off and model tier-down logic to ensure 100% workflow resilience.
|
||||
- **Ultra-Fast V2 Render Mode**: The final `render-and-pr` stage bypasses redundant HTTP health checks, GitHub API metadata fetching, and AI agent evaluation loops by leveraging the pre-computed YAML inventory to assemble the portal instantaneously.
|
||||
### 4.4. Doc-as-Behavior Mandate Bridge
|
||||
@@ -340,14 +342,18 @@ Nubenetes operates with two distinct editions to serve different engineering nee
|
||||
|
||||
### 5.1. V1: The Exhaustive Archive
|
||||
- **Purpose:** Preservation of all technical knowledge since 2018.
|
||||
- **Scope:** 17,000+ links across 160+ pages.
|
||||
- **SEO Guard:** Deployed at the domain root (`/`) to preserve 6+ years of historical backlinks and deep-links.
|
||||
- **Fallback Access:** Also available at [nubenetes.com/v1/](https://nubenetes.com/v1/).
|
||||
- **Source of Truth:** The `docs/` directory.
|
||||
- **Deployment:** [nubenetes.com](https://nubenetes.com)
|
||||
- **YouTube Mosaic:** Kept as a flat, historically ordered list of channel logos (11 per row) using simple inline width styling (`{: style="width:7%"}`). Newly added channels are appended at the end of this list.
|
||||
|
||||
### 5.2. V2: The Agentic Elite Edition
|
||||
- **Purpose:** A high-density, enterprise-grade portal for the modern Cloud Native ecosystem (2026 and beyond).
|
||||
- **Default Experience:** Deployed at `/v2/`.
|
||||
- **Root Redirection:** The root `index.html` automatically redirects human visitors to this portal.
|
||||
- **Algorithm:** Uses the **Incremental Elite Engine** to select and classify top-tier resources.
|
||||
- **Aesthetic:** "Cyber Cloud" styling (pure black backgrounds, neon cyan accents, advanced glassmorphism).
|
||||
- **YouTube Mosaic:** Organized as a categorized dashboard grouped into custom border-outlined cards with neon colors, class hooks (`.channel-logo`), and optimized image properties (`width: 48px; height: 48px`).
|
||||
- **Visual Standards (Elite Hierarchy):**
|
||||
- **`==[Yellow Highlighting]==`**: **Platinum Standard** (5 stars) – Foundational "Must-Read" assets.
|
||||
- **`**Bold Text**`**: **Gold Standard** (4 stars) – Highly recommended resources with strong industry momentum.
|
||||
@@ -375,6 +381,7 @@ To better understand the dual-nature of the project, the following matrix detail
|
||||
| **8** | **Content Format** | **Original Language**: Preserves V1 native descriptions (Spanish, French, etc.). | **Global English**: All summaries and UI are in Professional English for global access. |
|
||||
| **9** | **Maintenance Type** | **Surgical Repair**: Dead links are removed or updated line-by-line. | **Full Refresh**: Orphaned files are pruned and content is re-indexed from the inventory. |
|
||||
| **10** | **Target Audience** | **Researchers & Historians**: Looking for specific deep technical context. | **Architects & Decision Makers**: Looking for vetted, stable, and mature solutions. |
|
||||
| **11** | **YouTube Mosaic** | **Flat Historical Sequence**: A single flat ordered list of channel logos (11 per row) in their original historical sequence (new channels appended at the end) with `{: style="width:7%"}` inline styling. | **Categorized & Styled**: Grouped into border-outlined card panels by category with neon outlines, custom logo alignment (`width:48px; height:48px`), and class hooks. |
|
||||
|
||||
### 5.4. The Incremental Elite Engine
|
||||
To maintain the high-density quality of V2 without redundant AI costs, the `V2VisionEngine` implements an incremental synchronization strategy:
|
||||
@@ -404,7 +411,31 @@ By separating these domains, Nubenetes ensures **100% Resilience**:
|
||||
|
||||
---
|
||||
|
||||
### 5.6. Multi-Language Support Policy
|
||||
### 5.6. Dynamic YouTube Mosaic Engine
|
||||
Nubenetes manages the YouTube channel visual mosaic dynamically to support distinct V1 and V2 layout requirements from a single database source:
|
||||
|
||||
- **Unified Schema (`data/inventory.yaml`)**: All channel metadata is stored under the `youtube_mosaic` key in the centralized inventory file:
|
||||
|
||||
```yaml
|
||||
https://www.youtube.com/@GoogleGemini:
|
||||
title: Google Gemini
|
||||
status: online
|
||||
youtube_mosaic:
|
||||
category: ai_advanced_tech # Category grouping ID (V2)
|
||||
image: images/google_gemini_logo.png
|
||||
order_v1: 122 # Flat sequence index (V1)
|
||||
order_v2: 0 # Category sorting index (V2)
|
||||
```
|
||||
|
||||
- **Layout Generators (`src/reorganize_mosaic.py`)**:
|
||||
* **V1 Flat Layout**: Sorts all channels globally by `order_v1` and formats them into a flat grid of 11 logos per row using simple inline width styling (`{: style="width:7%"}`). Newly added channels are appended at the end of the flat mosaic.
|
||||
* **V2 Categorized Layout**: Groups channels by category, sorts them by `order_v2` within each group, and renders them inside custom cards with border-outline colors (e.g., purple for AI) matching the dimensions.
|
||||
|
||||
- **Workflow Integration**: The mosaic generation is fully integrated into the **V2 Publisher** workflow (`04.1. V2 Publisher`). During any manual or automated run (cron jobs, PR merges), `src/reorganize_mosaic.py` runs automatically to rebuild both visual sections, preserving their layout differences across the entire codebase lifecycle.
|
||||
|
||||
---
|
||||
|
||||
### 5.7. Multi-Language Support Policy
|
||||
To embrace the diverse global Cloud Native community while maintaining international discoverability, Nubenetes implements a dual-layer linguistic strategy powered by a **Data-First Architecture**:
|
||||
|
||||
- **Linguistic Data Persistence**: Language detection is treated as a core metadata attribute. The centralized database ([`data/inventory.yaml`](data/inventory.yaml)) stores resources using specific fields:
|
||||
@@ -418,6 +449,7 @@ To embrace the diverse global Cloud Native community while maintaining internati
|
||||
* `hierarchy`: Persistent, **recursive technical classification** (list of up to 10 levels) for O'Reilly-style grouping.
|
||||
* `content_hash` / `health_score`: Advanced fields for content drift detection and reliability tracking.
|
||||
* `source_provenance` / `social_preview_url`: Data for origin tracing and V2 visual enrichment.
|
||||
* `addition_method`: Origin type of the resource addition ('manual' or 'automatic') to support growth and scaling metrics.
|
||||
- **Separation of Concerns (Data vs. UI)**:
|
||||
* **The Database (Source of Truth)**: Holds raw data, enabling future features like language-based filtering or statistics without re-processing links.
|
||||
* **The Portal (Visual Rendering)**: The `V2VisionEngine` dynamically converts the metadata into visual UI tags (e.g., `[SPANISH CONTENT]`, `[ARCHITECT LEVEL]`).
|
||||
@@ -533,7 +565,7 @@ The "Platinum" tier represents the highest level of autonomous maintenance, focu
|
||||
- **Rendering Risk Detection**: Ensures HTML blocks like `<center>` include the mandatory `markdown="1"` attribute ([Mandate 19](GEMINI.md)).
|
||||
|
||||
#### Infrastructure Auto-Sync
|
||||
- **Workflow UI Synchronization**: The [UI Sync Engine](src/sync_workflow_ui.py) automatically updates the [GitHub Actions Interface](.github/workflows/agentic_cron.yml) whenever [Curation Sources](data/curation_sources.yaml) are added or modified ([Mandate 11](GEMINI.md)).
|
||||
- **Workflow UI Synchronization**: The [UI Sync Engine](src/sync_workflow_ui.py) automatically updates the [GitHub Actions Interface](.github/workflows/01.1.agentic_cron.yml) whenever [Curation Sources](data/curation_sources.yaml) are added or modified ([Mandate 11](GEMINI.md)).
|
||||
|
||||
#### Reputation Pulse (Vaporware Filter)
|
||||
- **Community-Based Vetting**: The [Curation Engine](src/agentic_curator.py) utilizes **Google Search Grounding** to cross-reference new tools with platforms like Reddit and Hacker News.
|
||||
@@ -726,6 +758,7 @@ The heart of the new Nubenetes is a suite of AI Agents that operate on our `deve
|
||||
4. **Resilient Architecture Core**:
|
||||
- **Exponential Backoff**: Intelligent `tenacity`-based retry logic in `gemini_utils.py` gracefully handles 429 Rate Limits before triggering the Circuit Breaker.
|
||||
- **Flash-First Architecture**: Prioritizes Gemini Flash/Lite models for high-density Analyst tasks, enabling processing of 10,000+ resources within the 6-hour GitHub Actions limit through 100-item batching and 2-second safety delays.
|
||||
- **Programmatic Smart Injection (Option B)**: The system extracts document headers and has Gemini Flash choose the target header, performing the actual line insertion using Python. This bypasses the need for Gemini Pro to rewrite entire documents, slashing API usage and preventing 429 errors.
|
||||
- **Incremental Persistence (Mandate 22)**: Implements a dual-phase auto-save mechanism that flushes the `inventory.yaml` database to disk periodically **without waiting for the workflow to finish**:
|
||||
* **Metadata Phase**: Saves every **500 GitHub repositories** processed.
|
||||
* **AI Phase**: Saves every **20 AI batches** (1,000 resources) analyzed.
|
||||
@@ -745,7 +778,7 @@ Maintainers can manually trigger and tune workflows via the GitHub Actions UI. T
|
||||
|
||||
| # | Phase / Category | Workflow | Primary Manual Flags | Default | Technical Effect |
|
||||
| :---: | :--- | :--- | :--- | :---: | :--- |
|
||||
| **01** | **Discovery** | [**01.1. Automated Agentic Curation**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/agentic_cron.yml) | `historical_mode` | ==TRUE== | Processes all discovery sources (ignores 30-day window). |
|
||||
| **01** | **Discovery** | [**01.1. Automated Agentic Curation**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/01.1.agentic_cron.yml) | `historical_mode` | ==TRUE== | Processes all discovery sources (ignores 30-day window). |
|
||||
| | | | `include_*` | ==TRUE== | Toggles specific topics (k8s, cloud, ai, etc.). |
|
||||
| | | [**01.2. Backup-based Curation**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/agentic_backup.yml) | `historical_mode` | ==TRUE== | Ignores time windows for static file processing. |
|
||||
| **02** | **Integrity** | [**02.1. Intelligent Link Cleaner**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/intelligent_link_cleaner.yml) | `force_full_check` | ==FALSE== | Bypasses cache for global archive auditing. |
|
||||
@@ -760,7 +793,7 @@ Maintainers can manually trigger and tune workflows via the GitHub Actions UI. T
|
||||
| **04** | **Elite Portal** | [**04.1. V2 Publisher**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/agentic_v2_publish.yml) | `restore_cache` | ==FALSE== | Restores inventory from GHA cache. |
|
||||
| | | [**04.2. Emergency V2 PR Generator**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/agentic_v2_pr_only.yml) | `restore_cache` | ==FALSE== | Restores inventory from GHA cache. |
|
||||
| **05** | **Metrics** | [**05.1. README Automated Sync**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/readme_sync.yml) | N/A | ==AUTO== | Updates metrics and TOC upon `develop` push. |
|
||||
| **06** | **Deployment** | [**06.1. GitHub Pages Deploy**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/main.yml) | N/A | ==MASTER== | Native GH Pages deployment from stable artifacts. |
|
||||
| **06** | **Deployment** | [**06.1. Final Portal Deploy**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/06.deploy_final.yml) | N/A | ==MASTER== | Native GH Pages deployment from stable artifacts. |
|
||||
| **07** | **Quality Gate**| [**07.1. PR Guardian AI**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/pr_guardian.yml) | N/A | ==AUTO== | Agentic pre-submit validation for PR compliance. |
|
||||
| | | [**07.2. Markdown Linter**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/markdown_linter.yml) | N/A | ==AUTO== | Validates HMTL/Markdown syntax (ignores MD051/MD013). |
|
||||
| **08** | **Maintenance**| [**08.1. Branch Lifecycle Cleanup**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/cleanup_merged_branches.yml) | N/A | ==CRON== | Deletes remote branches merged into `develop`. |
|
||||
@@ -903,10 +936,11 @@ graph LR
|
||||
B --> D["V2 Vision Engine"]
|
||||
B --> Z["README Sync"]
|
||||
D --> E["V2 Update (develop)"]
|
||||
E --> M["Sync to 'master'"]
|
||||
M --> C["Pip Cache & CI/CD Build"]
|
||||
M["Sync to 'master'"] --> C["Pip Cache & CI/CD Build"]
|
||||
C --> F["Upload Pages Artifact"]
|
||||
F --> G["Native Deploy to nubenetes.com"]
|
||||
F --> G["Native Deploy: V1 (Root/SEO), V2 (/v2/), V1 Fallback (/v1/)"]
|
||||
G --> H["Inject Root Redirect to /v2/"]
|
||||
Z --> B
|
||||
Z --> B
|
||||
```
|
||||
|
||||
@@ -922,6 +956,21 @@ To handle the scale of 17k+ resources, the engine automatically fragments report
|
||||
### 9.8. Workflow UI Auto-Sync
|
||||
Maintains **Mandate 11** by detecting new categories and alerting maintainers to update the GitHub Actions interface.
|
||||
|
||||
### 9.9. Resilience and Massive Recovery (The 6-Hour Rule)
|
||||
When processing massive datasets (e.g., full AI re-evaluations of 18k+ links), workflows may hit the **GitHub Actions 6-hour execution limit**. Nubenetes is designed to handle this gracefully:
|
||||
|
||||
1. **Incremental Persistence**: The engine saves progress to the GitHub Actions Cache periodically (every 20 batches). Even if the job is cancelled or times out, the `Persist Incremental Inventory to Cache` step runs `always()`.
|
||||
2. **Recovery Procedure**: If a workflow fails due to "exceeded the maximum execution time", follow these steps to resume:
|
||||
* **Trigger**: Go to the Actions tab and select the failed workflow (e.g., `03.2. V2 AI Curator`).
|
||||
* **Run Workflow**: Select the `develop` branch.
|
||||
* **restore_cache**: Set to `true` (Downloads the last saved state).
|
||||
* **force_reevaluate**: Set to `false` (Ensures the AI only processes links that are still pending/missing metadata).
|
||||
3. **Finalization and Promotion**: Once the AI recovery run completes successfully (which will be much faster as it only processes pending items):
|
||||
* **Manual Publisher Trigger**: If the automated chain does not trigger, manually run the `04.1. V2 Publisher` workflow.
|
||||
* **Automated PR**: The Publisher will automatically create or update the Pull Request from `develop` to `master`.
|
||||
* **Human Review**: The final step remains a manual review and merge of the PR by the repository owner to deploy to production.
|
||||
4. **Efficiency**: This strategy ensures zero token waste and zero loss of processing time, allowing the system to reach 100% coverage across multiple successive runs if necessary.
|
||||
|
||||
---
|
||||
|
||||
## 10. Branching Strategy and Lifecycle
|
||||
@@ -1000,13 +1049,13 @@ To maintain transparency and ease of navigation, all key configuration, database
|
||||
- **Link Rules:** [`data/link_rules.yaml`](data/link_rules.yaml) - Defines strictness for URL transformations and deep-link preservation.
|
||||
- **Curation Sources:** [`data/curation_sources.yaml`](data/curation_sources.yaml) - Defines monitored X.com accounts and technical topics.
|
||||
- **Special Assets:** [`data/special_assets.yaml`](data/special_assets.yaml) - VIP logic orchestration.
|
||||
- **Site Config:** [V1 (mkdocs.yml)](mkdocs.yml), [V2 (v2-mkdocs.yml)](v2-mkdocs.yml).
|
||||
- **Site Config:** [V1 (mkdocs.yml)](mkdocs.yml), [V2 (v2-mkdocs.yml)](v2-mkdocs.yml). Uses `favicon-ultra.png` for visibility and `hero-car.png` for branding.
|
||||
|
||||
### 13.2. Centralized Metadata Databases
|
||||
- **Global Inventory:** [`data/inventory.yaml`](data/inventory.yaml) - The "System Memory" containing all link metadata (years, stars, descriptions, and audit history).
|
||||
|
||||
### 13.3. Autonomous Workflows
|
||||
- **01.1. Discovery & Curation:** [**Automated Agentic Curation**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/agentic_cron.yml)
|
||||
- **01.1. Discovery & Curation:** [**Automated Agentic Curation**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/01.1.agentic_cron.yml)
|
||||
- **01.2. Backup Data Processor:** [**Backup-based Curation**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/agentic_backup.yml) — Manual JSON/MD ingestion.
|
||||
- **02.1. Link Health Check:** [**Intelligent Link Cleaner & Dedup**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/intelligent_link_cleaner.yml) — Perpetual archive integrity engine.
|
||||
- **02.2. V2 Health Monitor:** [**V2 Health Monitor**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/agentic_v2_health.yml) — Weekly archive network validation.
|
||||
@@ -1016,7 +1065,7 @@ To maintain transparency and ease of navigation, all key configuration, database
|
||||
- **04.1. V2 Publisher:** [**V2 Publisher**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/agentic_v2_publish.yml) — Automatic V2 portal generation (Fast-Track rendering).
|
||||
- **04.2. Emergency PR Generator:** [**Emergency V2 PR Generator**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/agentic_v2_pr_only.yml) — Data recovery off-ramp.
|
||||
- **05.1. README Metrics Sync:** [**README Automated Sync**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/readme_sync.yml) — Automatic TOC and metric synchronization.
|
||||
- **06.1. Deployment Pipeline:** [**GitHub Pages Deploy**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/main.yml) — Native GitHub Pages artifact deployment.
|
||||
- **06.1. Deployment Pipeline:** [**Final Portal Deploy**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/06.deploy_final.yml) — Native GitHub Pages artifact deployment (V1 Root / V2 Subdirectory).
|
||||
- **07.1. PR Guardian AI:** [**PR Guardian AI**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/pr_guardian.yml) — Agentic PR compliance auditor.
|
||||
- **07.2. Markdown Validator:** [**Markdown Linter**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/markdown_linter.yml) — Syntax and rendering safety gate.
|
||||
- **08.1. Branch Lifecycle:** [**Branch Lifecycle Cleanup**](https://github.com/nubenetes/awesome-kubernetes/actions/workflows/cleanup_merged_branches.yml) — Bi-monthly remote branch cleanup.
|
||||
@@ -1027,7 +1076,7 @@ To maintain transparency and ease of navigation, all key configuration, database
|
||||
- **Curator Logic:** [`src/agentic_curator.py`](src/agentic_curator.py) - Primary classification and description engine.
|
||||
- **V2 Vision Engine:** [`src/v2_optimizer.py`](src/v2_optimizer.py) - Elite portal generation and maturity scoring.
|
||||
- **Video Hub Enrichment:** [`src/enrich_videos.py`](src/enrich_videos.py) - High-fidelity synthesis using **yt-dlp** and transcripts.
|
||||
- **Video Portal Logic:** [`src/v2_video_portal.py`](src/v2_video_portal.py) - Categorized layout with **O'Reilly Journey Builder** and multiline rendering fixes.
|
||||
- **Video Portal Logic:** [`src/v2_video_portal.py`](src/v2_video_portal.py) - Categorized layout with **O'Reilly Journey Builder**, automated watch-to-embed YouTube conversion, and markdownlint-safe bullet formatting.
|
||||
- **V2 Specialized Agents:**
|
||||
- **Health Monitor:** [`src/v2_health.py`](src/v2_health.py)
|
||||
- **Metadata Engine:** [`src/v2_metadata.py`](src/v2_metadata.py)
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
import requests
|
||||
import feedparser
|
||||
|
||||
urls_to_test = [
|
||||
"https://www.anthropic.com/feed.xml",
|
||||
"https://www.anthropic.com/rss.xml",
|
||||
"https://www.anthropic.com/index.xml",
|
||||
"https://openai.com/news/rss.xml",
|
||||
"https://openai.com/blog/rss.xml",
|
||||
"https://developers.googleblog.com/feeds/posts/default?alt=rss",
|
||||
"https://developers.googleblog.com/rss",
|
||||
"https://cursor.com/blog/rss",
|
||||
"https://cursor.com/rss",
|
||||
"https://www.uber.com/en-US/blog/engineering/rss/",
|
||||
"https://eng.uber.com/feed/",
|
||||
"https://blog.developer.atlassian.com/feed/",
|
||||
"https://engineering.atlassian.com/feed/",
|
||||
"https://netflixtechblog.com/feed",
|
||||
"https://cloud.google.com/blog/rss"
|
||||
]
|
||||
|
||||
for url in urls_to_test:
|
||||
try:
|
||||
r = requests.get(url, headers={"User-Agent": "Mozilla/5.0"}, timeout=5)
|
||||
if r.status_code == 200:
|
||||
d = feedparser.parse(r.content)
|
||||
if len(d.entries) > 0:
|
||||
print(f"VALID: {url} ({len(d.entries)} entries)")
|
||||
else:
|
||||
print(f"EMPTY/INVALID: {url}")
|
||||
else:
|
||||
print(f"FAIL ({r.status_code}): {url}")
|
||||
except Exception as e:
|
||||
print(f"ERROR: {url} -> {e}")
|
||||
@@ -31,6 +31,14 @@ sources:
|
||||
- "NotebookLM" # Official NotebookLM
|
||||
- "LangChainAI" # Agentic frameworks
|
||||
- "llama_index" # RAG & Agents
|
||||
- "modelcontextpc" # MCP Community / Protocol Updates
|
||||
- "AlexAlbert_" # Anthropic DevRel/MCP Specialist
|
||||
- "swyx" # AI Engineering & Agent Systems Expert
|
||||
- "google-antigravity" # Google Antigravity Agentic SDK Org
|
||||
- "GoogleDevs" # Google Developers (for SDK and API announcements)
|
||||
feeds:
|
||||
- "https://openai.com/news/rss.xml"
|
||||
- "https://blog.google/technology/ai/rss/"
|
||||
|
||||
- topic: "Developer Productivity & AI Agents"
|
||||
accounts:
|
||||
@@ -40,12 +48,16 @@ sources:
|
||||
- "midudev" # Web Dev & AI Content Creator
|
||||
- "natfriedman" # AI Expert (Former GitHub CEO)
|
||||
- "karpathy" # AI Expert (Andrej Karpathy)
|
||||
feeds:
|
||||
- "https://github.blog/feed/"
|
||||
- "https://github.blog/category/engineering/feed/"
|
||||
|
||||
- topic: "Data & Big Data"
|
||||
accounts:
|
||||
- "Databricks"
|
||||
- "ApacheSpark"
|
||||
- "snowflakedb"
|
||||
- "UberEng" # Uber Engineering
|
||||
|
||||
- topic: "Infrastructure as Code & GitOps"
|
||||
accounts:
|
||||
@@ -53,11 +65,9 @@ sources:
|
||||
- "PulumiCorp"
|
||||
- "ArgoProj"
|
||||
- "fluxcd"
|
||||
- "Atlassian" # Atlassian Engineering / Developer Updates
|
||||
feeds:
|
||||
- "https://netflixtechblog.com/feed"
|
||||
- "https://engineering.atlassian.com/feed"
|
||||
- "https://blog.cloudflare.com/rss/"
|
||||
- "https://medium.com/feed/uber-engineering"
|
||||
- "https://engineering.fb.com/feed/"
|
||||
- "https://aws.amazon.com/blogs/aws/feed/"
|
||||
- "https://cloud.google.com/blog/rss/"
|
||||
|
||||
@@ -22,9 +22,19 @@ special_assets:
|
||||
- Gateway Hub: Add a 'Navigation Paths' section to guide users to dimensions.
|
||||
keywords: ["introduction", "getting started", "fundamentals", "microservices"]
|
||||
|
||||
- file: "about.md"
|
||||
v1_rule: "Preserve the original manifest and historical context. Do not reorganize text."
|
||||
v2_rule: |
|
||||
- Platinum Manifest: Transform the V1 text into a high-density 'Engineering Manifest' for 2026.
|
||||
- Core Story: Preserve the Munich car manufacturer origin as the project's 'Genesis'.
|
||||
- Philosophy Pillars: Visualize the DevOps vs GitOps vs SRE principles in an advanced table.
|
||||
- The 'Hard Way' Warning: Include a section on technical quality and standardization vs obfuscation.
|
||||
- Scientific Method: Feature the Mark Stevenson quote as a foundational principle.
|
||||
keywords: ["about", "mission", "philosophy", "manifesto", "history"]
|
||||
|
||||
# Navigation Renaming
|
||||
dimension_renaming:
|
||||
"Intelligent Control Plane": "AI and Artificial Intelligence"
|
||||
"Intelligent Control Plane": "AI"
|
||||
|
||||
# Advanced Classification Rules for V2
|
||||
v2_learning_paths:
|
||||
|
||||
@@ -120452,23 +120452,20 @@ https://www.ewsolutions.com/worst-project-management-practices:
|
||||
- page: platform-and-site-reliability.md
|
||||
is_bold: false
|
||||
is_highlighted: false
|
||||
https://devdriven.by:
|
||||
https://vadimkravcenko.com/shorts/promotion-based-development/:
|
||||
v1:
|
||||
- page: project-management-methodology.md
|
||||
is_bold: false
|
||||
is_bold: true
|
||||
is_highlighted: false
|
||||
- page: about.md
|
||||
is_bold: true
|
||||
is_highlighted: false
|
||||
v2:
|
||||
- page: platform-and-site-reliability.md
|
||||
is_bold: false
|
||||
- page: about.md
|
||||
is_bold: true
|
||||
is_highlighted: false
|
||||
https://devdriven.by/promotion:
|
||||
v1:
|
||||
- page: project-management-methodology.md
|
||||
is_bold: false
|
||||
is_highlighted: false
|
||||
v2:
|
||||
- page: platform-and-site-reliability.md
|
||||
is_bold: false
|
||||
is_bold: true
|
||||
is_highlighted: false
|
||||
https://www.lavanguardia.com/vivo/20211113/7856878/cualidades-mas-valoran-empleados-jefe-pmv.html:
|
||||
v1:
|
||||
|
||||
@@ -73,13 +73,13 @@ Losing employment and significantly penalizing employability and economic bargai
|
||||
|
||||
> *"Tech industry thinks throwing more tools to the problem is the solution. More tools = more failure modes"* ([@rakyll](https://x.com/rakyll))
|
||||
|
||||
Instead of [reinventing the wheel](https://devdriven.by/promotion) by rewriting from scratch a new installer or ad-hoc devops tool to manage/monitor kubernetes, please pay attention to the links shared here and learn how to add value on the so called [day 2](https://dzone.com/articles/defining-day-2-operations). You will find solutions and knowledge in a practical and efficient way without being totally essential to obtain a certification to successfully complete the task. For example, if there's money for [reinventing the wheel](https://www.reddit.com/r/ExperiencedDevs/comments/pw6vuv/promotion_driven_development) on day 1, then there's money for investing in these high value added solutions on day 2 where automation can significantly improve our lives and the quality of the delivered service. **Automation is also a key element when evaluating the delivery of a service.**
|
||||
Instead of [reinventing the wheel](https://vadimkravcenko.com/shorts/promotion-based-development/) by rewriting from scratch a new installer or ad-hoc devops tool to manage/monitor kubernetes, please pay attention to the links shared here and learn how to add value on the so called [day 2](https://dzone.com/articles/defining-day-2-operations). You will find solutions and knowledge in a practical and efficient way without being totally essential to obtain a certification to successfully complete the task. For example, if there's money for [reinventing the wheel](https://www.reddit.com/r/ExperiencedDevs/comments/pw6vuv/promotion_driven_development) on day 1, then there's money for investing in these high value added solutions on day 2 where automation can significantly improve our lives and the quality of the delivered service. **Automation is also a key element when evaluating the delivery of a service.**
|
||||
|
||||
**Nubenetes shares relevant information that helps spread the new technological and cultural standards, in order to eliminate bottlenecks and [silos](https://alexander-goida.medium.com/thoughts-about-breaking-silos-of-software-engineering-teams-323d1f78ef68) and promote digital transformation.**
|
||||
|
||||
Does saying this publicly imply being blacklisted and losing professional opportunities? What kind of society do we live in?
|
||||
|
||||
Tips: ask the hiring manager what experience they have with Cloud Automation, Cloud Managed Services and K8s in Production, if they deploy OpenShift via IPI[^1] or UPI, whether they are familiar with [Gitops](https://thenewstack.io/kubernetes-at-scale-without-gitops-is-a-bad-idea) as the correct way of doing DevOps, if they work with modern, easy-to-use automation tools ([terraform](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs), [ansible modules](https://docs.ansible.com/projects/ansible/latest/collections/kubernetes/core/k8s_module.html) with YAML/[Jinja templates](https://github.com/pallets/jinja), argocd, helm, an automation server[^3] to run pipelines, declarative code in Jenkins[^4] Pipelines or in DevOps Azure Pipelines, [IaC boilerplates](https://nubenetes.com/terraform) instead of [k8s vanilla](https://www.digitalocean.com/blog/vanilla-kubernetes-vs-managed-kubernetes), etc) or they are not practical and prefer to develop their own ad-hoc tools with millions of lines of code that need maintenance (by who?). If any doubt, ask them to show you their pipelines and custom solutions, how long it takes them to deploy and setup their k8s infra on day 1 & day 2 (pets vs cattle service model), how long it takes them to deploy a single app and if the process is fully automated or not, what monitoring solutions they have, if security and Role-based Access Control (RBAC) are implemented in their k8s clusters, whether changes and PoCs are tested first in ephemeral and isolated K8s/Cloud infra test environments with IaC & CI/CD pipelines, if solutions can be discussed within the team, etc.
|
||||
Tips: ask the hiring manager what experience they have with Cloud Automation, Cloud Managed Services and K8s in Production, if they deploy OpenShift via IPI[^1] or UPI, whether they are familiar with [Gitops](https://thenewstack.io/kubernetes-at-scale-without-gitops-is-a-bad-idea) as the correct way of doing DevOps, if they work with modern, easy-to-use automation tools ([terraform](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs), [ansible modules](https://docs.ansible.com/projects/ansible/latest/collections/kubernetes/core/k8s_module.html) with YAML/[Jinja templates](https://github.com/pallets/jinja), argocd, helm, an automation server[^3] to run pipelines, declarative code in Jenkins[^4] Pipelines or in DevOps Azure Pipelines, [IaC boilerplates](https://nubenetes.com/terraform/) instead of [k8s vanilla](https://www.digitalocean.com/blog/vanilla-kubernetes-vs-managed-kubernetes), etc) or they are not practical and prefer to develop their own ad-hoc tools with millions of lines of code that need maintenance (by who?). If any doubt, ask them to show you their pipelines and custom solutions, how long it takes them to deploy and setup their k8s infra on day 1 & day 2 (pets vs cattle service model), how long it takes them to deploy a single app and if the process is fully automated or not, what monitoring solutions they have, if security and Role-based Access Control (RBAC) are implemented in their k8s clusters, whether changes and PoCs are tested first in ephemeral and isolated K8s/Cloud infra test environments with IaC & CI/CD pipelines, if solutions can be discussed within the team, etc.
|
||||
|
||||
[^3]: Jenkins/CloudBees, Ansible Tower/AWX, Foreman, Rundeck, Azure DevOps, GitLab CI, etc.
|
||||
|
||||
@@ -110,7 +110,7 @@ Let's improve both the private & public IT sector and the opportunities in large
|
||||
|
||||
<center markdown="1">
|
||||
|
||||
<iframe width="200" height="200" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A/api.soundcloud.com/tracks/17422127&color=%230a1ef1&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/thespaceman78" title="thespaceman78" target="_blank" style="color: #cccccc; text-decoration: none;"></a> · <a href="https://soundcloud.com/thespaceman78/the-seatbelts-tank-ost-cowboy" title="The Seatbelts - Tank!" target="_blank" style="color: #cccccc; text-decoration: none;">The Seatbelts - Tank!</a></div>
|
||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/GZl7N8sXyEo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
|
||||
|
||||
</center>
|
||||
----
|
||||
|
||||
@@ -17,6 +17,8 @@ Resources, tools, and projects related to autonomous AI agents, Model Context Pr
|
||||
- [IBM IAM for AI Agents](https://t.co/EKsVgKA4xn) -how IBM Identity and Access Management (IAM) provides native IAM for AI agents, enabling them to have an identity and deliver least privileged access.
|
||||
- [Level Up Your Agents: Announcing Google's Official Skills Repository](https://cloud.google.com/blog/topics/developers-practitioners/level-up-your-agents-announcing-googles-official-skills-repository) 🌟 - This blog post announces the launch of Google's official Agent Skills repository on GitHub, designed to equip AI agents with condensed expertise on specific technologies and tasks. Skills are presented in an open Markdown format, including reference files and code snippets, to provide agent-first documentation. This approach aims to reduce 'context bloat' often encountered when using Model Context Protocol (MCP) servers, leading to more efficient and cost-effective AI agent interactions with Google Cloud products like Gemini API, BigQuery, and GKE.
|
||||
- [Claude Code Best Practice](https://github.com/shanraisshan/claude-code-best-practice) - A GitHub repository focused on 'vibe coding to agentic engineering', providing practices and examples for interacting with AI models like Claude. It includes sections on agents, commands, skills, development workflows, and implementation details.
|
||||
- [youtube: The 6 Levels of Claude Code Explained](https://www.youtube.com/watch?v=TUKYbUIXLOE) 🌟 - This video provides a structured architectural roadmap for mastering Claude Code, Anthropic's agentic CLI tool for software engineering. It details the progression from basic code generation to complex, multi-step agentic workflows, emphasizing the tool's relevance to the 2026 Kubernetes ecosystem through automated manifest refactoring, contextual codebase analysis, and direct CLI-driven infrastructure orchestration.
|
||||
- [Claude Code in Action](https://anthropic.skilljar.com/claude-code-in-action) 🌟 - A course from Anthropic Academy that provides comprehensive training on using Claude Code for software development tasks. It covers the underlying architecture of AI coding assistants, practical implementation techniques, and advanced integration strategies. Key topics include understanding coding assistant architecture, exploring Claude Code's tool use system, mastering context management techniques, implementing visual communication workflows, creating custom automation, and extending functionality with MCP servers.
|
||||
- [Kiro: Engineering Rigor for Agentic Development](https://kiro.dev) - Kiro is a tool designed to bring engineering discipline to AI agent development. It focuses on managing intent, handling long-running tasks across large codebases, and validating code correctness through a learning agent. Key features include converting natural language prompts into structured requirements (EARS notation), generating architectural designs, creating implementation plans with discrete, sequenced tasks, and enabling terminal-based interaction for building features, automating workflows, and debugging.
|
||||
- [HolmesGPT (Robusta)](https://github.com/HolmesGPT/holmesgpt) - An open-source AI agent for investigating Prometheus alerts and Kubernetes incidents. It uses LLMs to triage issues and provide recommended fixes.
|
||||
- [Skyvern](https://github.com/Skyvern-ai/Skyvern) - Automate browser-based workflows using LLMs and Computer Vision.
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
- [Development Environments for Cloud Agents](https://cursor.com/blog/cloud-agent-development-environments) 🌟 -Cursor's new tools for configuring development environments for cloud agents. It highlights the importance of robust environments for agents to perform end-to-end engineering tasks, including accessing codebases, dependencies, credentials, and build systems. The feature supports multi-repo environments, allowing agents to reason across multiple codebases, which is crucial for microservice architectures.
|
||||
- [Cursor AI Fundamentals Course](https://cursor.com/es/learn) - Official tutorials for Cursor, covering AI fundamentals including models, tokens, hallucinations, agents, MCP, skills, and context. The course is in Spanish and consists of 13 modules.
|
||||
- [Cursor Bugbot Effort Levels Documentation](https://cursor.com/docs/bugbot#effort-levels) - Documentation for Cursor's Bugbot, introducing 'effort levels' for users on usage-based plans. These levels can be configured via the Bugbot dashboard.
|
||||
- [Claude Code in Action](https://anthropic.skilljar.com/claude-code-in-action) - A course from Anthropic Academy that provides comprehensive training on using Claude Code for software development tasks. It covers the underlying architecture of AI coding assistants, practical implementation techniques, and advanced integration strategies. Key topics include understanding coding assistant architecture, exploring Claude Code's tool use system, mastering context management techniques, implementing visual communication workflows, creating custom automation, and extending functionality with MCP servers.
|
||||
- [Claude Code in Action](https://anthropic.skilljar.com/claude-code-in-action) - *(Related to ai-agents-mcp topic)*
|
||||
- [LLMs-from-scratch](https://github.com/rasbt/LLMs-from-scratch) 🌟 - A GitHub repository that provides a step-by-step implementation of a ChatGPT-like Large Language Model (LLM) using PyTorch, covering development, pretraining, and finetuning.
|
||||
- [Claude Code Best Practice](https://github.com/shanraisshan/claude-code-best-practice) - *(Related to ai-agents-mcp topic)*
|
||||
- [Docker for LLMs](https://www.docker.com/llm) - *(Related to docker topic)*
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
- [AWS Architecture Blog](https://aws.amazon.com/blogs/architecture)
|
||||
- [AWS Official Blog](http://blogs.aws.amazon.com)
|
||||
- [AWS Labs GitHub](https://github.com/awslabs)
|
||||
- [AWS Quick Start Reference Deployments](http://aws.amazon.com/es/quickstart)
|
||||
- [InfoWorld Review – Amazon Aurora Rocks MySQL](https://aws.amazon.com/blogs/aws/infoworld-review-amazon-aurora-rocks-mysql)
|
||||
- [AWS Cost Explorer Update – Access to EC2 Usage Data](https://aws.amazon.com/blogs/aws/aws-cost-explorer-update-access-to-ec2-usage-data)
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
<center markdown="1">
|
||||
|
||||
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A/api.soundcloud.com/tracks/294589005&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/jimmy-sax" title="Jimmy Sax" target="_blank" style="color: #cccccc; text-decoration: none;">Jimmy Sax</a> · <a href="https://soundcloud.com/jimmy-sax/una-matina-jimmy-sax" title="Una Matina Jimmy Sax" target="_blank" style="color: #cccccc; text-decoration: none;">Una Matina Jimmy Sax</a></div>
|
||||
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/1856102433&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/jimmy-sax" title="Jimmy Sax" target="_blank" style="color: #cccccc; text-decoration: none;">Jimmy Sax</a> · <a href="https://soundcloud.com/jimmy-sax/una-mattina" title="Una Mattina" target="_blank" style="color: #cccccc; text-decoration: none;">Una Mattina</a></div>
|
||||
|
||||
</center>
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
<center markdown="1">
|
||||
|
||||
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A/api.soundcloud.com/tracks/873312214&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/yardensaxophone" title="Yarden Saxophone" target="_blank" style="color: #cccccc; text-decoration: none;">Yarden Saxophone</a> · <a href="https://soundcloud.com/yardensaxophone/esperanza-yarden-saxophone" title="Esperanza - Yarden Saxophone" target="_blank" style="color: #cccccc; text-decoration: none;">Esperanza - Yarden Saxophone</a></div>
|
||||
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/873312214&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/yardensaxophone" title="Yarden Saxophone" target="_blank" style="color: #cccccc; text-decoration: none;">Yarden Saxophone</a> · <a href="https://soundcloud.com/yardensaxophone/esperanza-yarden-saxophone" title="Esperanza - Yarden Saxophone" target="_blank" style="color: #cccccc; text-decoration: none;">Esperanza - Yarden Saxophone</a></div>
|
||||
|
||||
</center>
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
<center markdown="1">
|
||||
|
||||
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A/api.soundcloud.com/tracks/636487902&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/alessandro-donofrio-5" title="Alemix Donofrio" target="_blank" style="color: #cccccc; text-decoration: none;">Alemix Donofrio</a> · <a href="https://soundcloud.com/alessandro-donofrio-5/jimmy-sax-time" title="Jimmy Sax - Time" target="_blank" style="color: #cccccc; text-decoration: none;">Jimmy Sax - Time</a></div>
|
||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/t_hdOVsdRSE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
|
||||
|
||||
</center>
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 880 KiB |
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="315.134px" height="88.15px" viewBox="140.08 380.418 315.134 88.15" enable-background="new 140.08 380.418 315.134 88.15"
|
||||
xml:space="preserve">
|
||||
<title>logos</title>
|
||||
<style type="text/css">
|
||||
path { fill: #00a2e8; }
|
||||
</style>
|
||||
<path d="M379.988,380.625c-3.113-0.493-6.072,1.525-6.746,4.604l-14.486,47.623l-15.873-52.346h-16.51l23.811,64.568
|
||||
c1.842,3.318,1.076,7.476-1.824,9.922c-2.383,1.864-4.684,1.864-9.645,1.825h-1.191v11.747h3.969c6.867,0,11.906-0.278,14.764-2.699
|
||||
c3.424-2.924,5.967-6.744,7.342-11.032l26.43-74.172h-10.039V380.625z M403.798,386.617c-4.648,3.81-7.283,9.549-7.143,15.557
|
||||
c-0.211,4.355,1.535,8.576,4.762,11.509l0,0c2.977,2.977,9.168,5.636,18.375,7.938l0,0c2.301,0.683,4.648,1.2,7.023,1.548
|
||||
c3.334,0.714,13.215,2.817,13.215,9.405c-0.031,2.951-1.697,5.642-4.326,6.984c-2.93,1.504-6.189,2.254-9.484,2.183
|
||||
c-4.186,0.154-8.324-0.922-11.904-3.095c-2.637-1.862-4.377-4.738-4.803-7.938h-14.484c-0.123,5.92,2.482,11.567,7.063,15.318
|
||||
c4.723,3.969,11.906,5.834,21.867,5.834s18.215-1.865,23.295-5.596c5.275-3.944,8.248-10.248,7.938-16.826
|
||||
c0.223-4.302-1.41-8.492-4.484-11.509c-5.559-3.806-11.84-6.427-18.453-7.699l-5.08-1.071c-10.953-2.302-15.875-5.199-15.875-9.406
|
||||
c-0.117-2.658,1.162-5.186,3.373-6.667c2.873-1.492,6.096-2.178,9.326-1.984c3.633-0.185,7.227,0.818,10.24,2.857h0.238l0.713,0.675
|
||||
c0.564,0.508,1.094,1.051,1.588,1.627c1.23,2.349,3.621,3.861,6.27,3.969h9.367c-0.613-5.438-3.281-10.437-7.461-13.969
|
||||
c-6.303-4.157-13.771-6.188-21.311-5.795c-7.072-0.306-14.047,1.731-19.844,5.795 M272.123,386.26
|
||||
c-4.65,3.825-7.284,9.576-7.144,15.596c-0.334,4.55,1.47,8.996,4.881,12.024l0,0c2.977,2.977,9.207,5.636,18.414,7.938l0,0
|
||||
c2.314,0.685,4.675,1.201,7.064,1.548c3.333,0.715,13.255,2.817,13.255,9.445c-0.016,2.966-1.686,5.675-4.326,7.024
|
||||
c-2.943,1.51-6.217,2.26-9.524,2.183c-4.251,0.184-8.463-0.894-12.104-3.096c-2.632-1.865-4.372-4.739-4.802-7.937h-14.524
|
||||
c-0.131,5.952,2.49,11.633,7.104,15.397c4.723,3.969,11.906,5.834,21.946,5.834s18.296-1.905,23.374-5.596
|
||||
c5.299-3.96,8.275-10.3,7.938-16.906c0.223-4.313-1.408-8.517-4.484-11.549c-5.582-3.82-11.891-6.455-18.533-7.738l-5.119-1.071
|
||||
c-10.993-2.342-15.874-5.238-15.874-9.445c-0.108-2.667,1.186-5.196,3.413-6.667c2.886-1.494,6.122-2.18,9.366-1.984
|
||||
c3.65-0.176,7.257,0.841,10.279,2.897h0.238l0.713,0.674c0.564,0.509,1.094,1.053,1.588,1.628c1.238,2.359,3.646,3.874,6.311,3.968
|
||||
h9.445c-0.697-5.342-3.375-10.228-7.5-13.691c-6.324-4.183-13.82-6.227-21.391-5.834c-7.075-0.285-14.048,1.765-19.843,5.834
|
||||
M241.247,382.767c-4.999,1.119-9.748,3.15-14.009,5.993c-4.54,2.342-7.975,6.376-9.564,11.23
|
||||
c-2.559,5.596-3.782,11.709-3.572,17.858v34.844h16.072v-37.105c-0.449-5.94,1.795-11.769,6.112-15.874
|
||||
c4.979-3.733,11.134-5.551,17.342-5.119h3.969v-13.652c-5.626,0.028-11.231,0.694-16.708,1.984 M149.614,386.895
|
||||
c-2.725,2.057-4.86,4.794-6.191,7.937c-0.159,0.675-0.357,2.302,2.222,2.302h13.096c1.267-1.892,3.144-3.292,5.318-3.968
|
||||
c2.566-0.813,5.245-1.215,7.937-1.191c3.097-0.062,6.182,0.395,9.128,1.35c3.526,0.668,6.077,3.753,6.072,7.342
|
||||
c0,7.342-11.231,8.73-14.922,9.207l-8.294,1.111c-6.192,0.684-12.155,2.73-17.461,5.992c-4.537,3.449-6.944,9.017-6.35,14.684
|
||||
c-0.615,6.168,2.07,12.203,7.064,15.875c5.197,3.439,11.309,5.237,17.541,5.158c3.453,0,7.5-0.237,12.144-0.674
|
||||
c4.328-0.358,8.559-1.474,12.5-3.294c4.088-1.422,7.471-4.364,9.445-8.215c2.887-4.773,4.27-10.305,3.969-15.874v-25.121
|
||||
c0.154-5.593-2.792-10.814-7.66-13.573c-7.358-3.725-15.581-5.41-23.811-4.881c-7.631-0.495-15.21,1.557-21.549,5.834
|
||||
M158.741,439.478L158.741,439.478c-2.188-2.052-3.4-4.938-3.333-7.937c-0.244-2.814,0.774-5.591,2.778-7.58
|
||||
c2.507-2,5.462-3.361,8.611-3.969l0,0l6.826-1.39c3.81-0.76,7.532-1.903,11.112-3.412l3.016-1.39v10.16
|
||||
c0.952,7.342-1.429,10.992-5.437,13.572c-4.028,3.452-9.227,5.228-14.525,4.961C164.514,442.578,161.312,441.511,158.741,439.478"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
@@ -0,0 +1 @@
|
||||
<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>ClickHouse</title><path fill="#FC801D" d="M21.333 10H24v4h-2.667ZM16 1.335h2.667v21.33H16Zm-5.333 0h2.666v21.33h-2.666ZM0 22.665V1.335h2.667v21.33zm5.333-21.33H8v21.33H5.333Z"/></svg>
|
||||
|
After Width: | Height: | Size: 261 B |
|
Before Width: | Height: | Size: 140 KiB After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 53 KiB |
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang=en>
|
||||
<meta charset=utf-8>
|
||||
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
|
||||
<title>Error 400 (Bad Request)!!1</title>
|
||||
<style>
|
||||
*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
|
||||
</style>
|
||||
<a href=//www.google.com/><span id=logo aria-label=Google></span></a>
|
||||
<p><b>400.</b> <ins>That’s an error.</ins>
|
||||
<p>Your client has issued a malformed or illegal request. <ins>That’s all we know.</ins>
|
||||
|
After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 272 KiB |
@@ -0,0 +1,14 @@
|
||||
<svg width="256" height="256" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Solid Black Background for Maximum Contrast (X.com Style) -->
|
||||
<rect width="256" height="256" fill="#000000"/>
|
||||
|
||||
<!-- Ultra-Bold "N" (Nubenetes) designed for 16x16 clarity -->
|
||||
<g fill="#00E5FF">
|
||||
<!-- Left Vertical Bar -->
|
||||
<rect x="20" y="20" width="65" height="216"/>
|
||||
<!-- Right Vertical Bar -->
|
||||
<rect x="171" y="20" width="65" height="216"/>
|
||||
<!-- Massive Diagonal -->
|
||||
<path d="M20 20 L85 20 L236 236 L171 236 Z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 554 B |
@@ -0,0 +1,46 @@
|
||||
<svg width="512" height="512" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient id="cyberGradient" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" style="stop-color:#00E5FF;stop-opacity:1" />
|
||||
<stop offset="100%" style="stop-color:#00838F;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<filter id="glow">
|
||||
<feGaussianBlur stdDeviation="5" result="coloredBlur"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="coloredBlur"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
</defs>
|
||||
<!-- Futuristic Cloud-Vehicle Base -->
|
||||
<path d="M100 350 Q 50 350 50 300 Q 50 250 100 250 L 120 200 Q 150 120 250 120 Q 350 120 380 200 L 400 250 Q 450 250 450 300 Q 450 350 400 350 Z"
|
||||
fill="url(#cyberGradient)"
|
||||
filter="url(#glow)"/>
|
||||
|
||||
<!-- Kubernetes Steering Wheel as Front Wheel -->
|
||||
<g transform="translate(140, 350) scale(0.6)">
|
||||
<circle cx="0" cy="0" r="80" fill="#0D1117" stroke="#FFFFFF" stroke-width="15"/>
|
||||
<g stroke="#FFFFFF" stroke-width="12" stroke-linecap="round">
|
||||
<line x1="0" y1="-80" x2="0" y2="80" transform="rotate(0)"/>
|
||||
<line x1="0" y1="-80" x2="0" y2="80" transform="rotate(51.4)"/>
|
||||
<line x1="0" y1="-80" x2="0" y2="80" transform="rotate(102.8)"/>
|
||||
<line x1="0" y1="-80" x2="0" y2="80" transform="rotate(154.2)"/>
|
||||
</g>
|
||||
<circle cx="0" cy="0" r="25" fill="#FFFFFF"/>
|
||||
</g>
|
||||
|
||||
<!-- Kubernetes Steering Wheel as Rear Wheel -->
|
||||
<g transform="translate(360, 350) scale(0.6)">
|
||||
<circle cx="0" cy="0" r="80" fill="#0D1117" stroke="#FFFFFF" stroke-width="15"/>
|
||||
<g stroke="#FFFFFF" stroke-width="12" stroke-linecap="round">
|
||||
<line x1="0" y1="-80" x2="0" y2="80" transform="rotate(0)"/>
|
||||
<line x1="0" y1="-80" x2="0" y2="80" transform="rotate(51.4)"/>
|
||||
<line x1="0" y1="-80" x2="0" y2="80" transform="rotate(102.8)"/>
|
||||
<line x1="0" y1="-80" x2="0" y2="80" transform="rotate(154.2)"/>
|
||||
</g>
|
||||
<circle cx="0" cy="0" r="25" fill="#FFFFFF"/>
|
||||
</g>
|
||||
|
||||
<!-- "N" Tech Detail -->
|
||||
<text x="220" y="280" font-family="Arial, sans-serif" font-size="100" font-weight="bold" fill="#0D1117" opacity="0.8">N</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1,10 @@
|
||||
<svg width="256" height="256" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Solid High-Contrast Background (LinkedIn/GitHub Style) -->
|
||||
<rect width="256" height="256" rx="48" fill="#0D1117"/>
|
||||
|
||||
<!-- Bold Stylized "N" (Nubenetes) with Cyan Accent -->
|
||||
<path d="M70 190V66L140 135V66H186V190L116 121V190H70Z" fill="#00E5FF"/>
|
||||
|
||||
<!-- Subtle Cloud Curve at the bottom for Cloud Context -->
|
||||
<path d="M116 190H186V170C186 160 178 152 168 152H134C124 152 116 160 116 170V190Z" fill="#00E5FF" opacity="0.3"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 537 B |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 905 KiB |
@@ -1,7 +1,7 @@
|
||||
# Nubenetes: Awesome Kubernetes & Cloud [](https://github.com/sindresorhus/awesome)
|
||||
|
||||
!!! tip "Nubenetes V2: Agentic Elite Edition is now live!"
|
||||
Looking for a high-density, AI-curated experience? Explore our [**V2 Elite Portal**](/v2) - Optimized for 2026 Architectural Standards.
|
||||
Looking for a high-density, AI-curated experience? Explore our [**V2 Elite Portal**](/v2/) - Optimized for 2026 Architectural Standards.
|
||||
|
||||
A curated list of awesome references collected since 2018. Microservices architectures rely on DevOps practices, automation, CI/CD (Continuous Integration & Delivery), and API-focused designs.
|
||||
|
||||
@@ -341,9 +341,9 @@ A curated list of awesome references collected since 2018. Microservices archite
|
||||
<center markdown="1">
|
||||
|
||||
[{: style="width:7%"}](https://www.youtube.com/c/DockerIo) [{: style="width:7%"}](https://www.youtube.com/c/cloudnativefdn) [{: style="width:7%"}](https://www.youtube.com/kubernetescommunity) [{: style="width:7%"}](https://www.youtube.com/c/redhat) [{: style="width:7%"}](https://www.youtube.com/c/OpenShift) [{: style="width:7%"}](https://www.youtube.com/c/Rancher) [{: style="width:7%"}](https://www.youtube.com/c/CloudBeesTV) [{: style="width:7%"}](https://www.youtube.com/c/jenkinscicd) [{: style="width:7%"}](https://www.youtube.com/channel/UCN2kblPjXKMcjjVYmwvquvg) [{: style="width:7%"}](https://www.youtube.com/channel/UCcxQbw8kT1-FRhFhO2QCetg) [{: style="width:7%"}](https://www.youtube.com/c/VMwareTanzu)<br/>
|
||||
[{: style="width:7%"}](https://www.youtube.com/c/IBMTechnology) [{: style="width:7%"}](https://www.youtube.com/c/amazonwebservices) [{: style="width:7%"}](https://www.youtube.com/user/googlecloudplatform) [{: style="width:7%"}](https://www.youtube.com/c/MicrosoftAzure) [{: style="width:7%"}](https://www.youtube.com/c/OracleCloudInfrastructure) [{: style="width:7%"}](https://www.youtube.com/c/Digitalocean) [{: style="width:7%"}](https://www.youtube.com/cloudflare) [{: style="width:7%"}](https://www.youtube.com/c/Scaleway-Cloud) [{: style="width:7%"}](https://www.youtube.com/c/OpenStackFoundation) [{: style="width:7%"}](https://www.youtube.com/c/HashiCorp) [{: style="width:7%"}](https://www.youtube.com/c/PulumiTV) <br/>
|
||||
[{: style="width:7%"}](https://www.youtube.com/c/dzone) [{: style="width:7%"}](https://www.youtube.com/c/PrometheusIo) [{: style="width:7%"}](https://www.youtube.com/c/Grafana) [{: style="width:7%"}](https://www.youtube.com/c/Istio) [{: style="width:7%"}](https://www.youtube.com/c/Elastic) [{: style="width:7%"}](https://www.youtube.com/c/dynatrace) [{: style="width:7%"}](https://www.youtube.com/c/appdynamics) [{: style="width:7%"}](https://www.youtube.com/c/NewRelicInc) [{: style="width:7%"}](https://www.youtube.com/channel/UC8uN3yhpeBeerGNwDiQbcgw) [{: style="width:7%"}](https://www.youtube.com/c/WeaveWorksInc) [{: style="width:7%"}](https://www.youtube.com/c/LambdaTest)<br/>
|
||||
[{: style="width:7%"}](https://www.youtube.com/c/Atlassian) [{: style="width:7%"}](https://www.youtube.com/c/Code) [{: style="width:7%"}](https://www.youtube.com/c/GitHub) [{: style="width:7%"}](https://www.youtube.com/c/Gitlab) [{: style="width:7%"}](https://www.youtube.com/c/Gitkraken) [{: style="width:7%"}](https://www.youtube.com/c/RocketChatApp) [{: style="width:7%"}](https://www.youtube.com/c/Slackhq) [{: style="width:7%"}](https://www.youtube.com/c/MattermostHQ) [{: style="width:7%"}](https://www.youtube.com/c/microsoft365) [{: style="width:7%"}](https://www.youtube.com/c/OpenProjectCommunity) [{: style="width:7%"}](https://www.youtube.com/c/Tetrate)<br/>
|
||||
[{: style="width:7%"}](https://www.youtube.com/c/IBMTechnology) [{: style="width:7%"}](https://www.youtube.com/c/amazonwebservices) [{: style="width:7%"}](https://www.youtube.com/user/googlecloudplatform) [{: style="width:7%"}](https://www.youtube.com/c/MicrosoftAzure) [{: style="width:7%"}](https://www.youtube.com/c/OracleCloudInfrastructure) [{: style="width:7%"}](https://www.youtube.com/c/Digitalocean) [{: style="width:7%"}](https://www.youtube.com/cloudflare) [{: style="width:7%"}](https://www.youtube.com/c/Scaleway-Cloud) [{: style="width:7%"}](https://www.youtube.com/c/OpenStackFoundation) [{: style="width:7%"}](https://www.youtube.com/c/HashiCorp) [{: style="width:7%"}](https://www.youtube.com/c/PulumiTV)<br/>
|
||||
[{: style="width:7%"}](https://www.youtube.com/c/dzone) [{: style="width:7%"}](https://www.youtube.com/c/PrometheusIo) [{: style="width:7%"}](https://www.youtube.com/c/Grafana) [{: style="width:7%"}](https://www.youtube.com/c/Istio) [{: style="width:7%"}](https://www.youtube.com/c/Elastic) [{: style="width:7%"}](https://www.youtube.com/c/dynatrace) [{: style="width:7%"}](https://www.youtube.com/c/appdynamics) [{: style="width:7%"}](https://www.youtube.com/c/NewRelicInc) [{: style="width:7%"}](https://www.youtube.com/channel/UC8uN3yhpeBeerGNwDiQbcgw) [{: style="width:7%"}](https://www.youtube.com/c/WeaveWorksInc) [{: style="width:7%"}](https://www.youtube.com/c/LambdaTest)<br/>
|
||||
[{: style="width:7%"}](https://www.youtube.com/c/Atlassian) [{: style="width:7%"}](https://www.youtube.com/c/Code) [{: style="width:7%"}](https://www.youtube.com/c/GitHub) [{: style="width:7%"}](https://www.youtube.com/c/Gitlab) [{: style="width:7%"}](https://www.youtube.com/c/Gitkraken) [{: style="width:7%"}](https://www.youtube.com/c/RocketChatApp) [{: style="width:7%"}](https://www.youtube.com/c/Slackhq) [{: style="width:7%"}](https://www.youtube.com/c/MattermostHQ) [{: style="width:7%"}](https://www.youtube.com/c/microsoft365) [{: style="width:7%"}](https://www.youtube.com/c/OpenProjectCommunity) [{: style="width:7%"}](https://www.youtube.com/c/Tetrate)<br/>
|
||||
[{: style="width:7%"}](https://www.youtube.com/c/RedHatDevelopers) [{: style="width:7%"}](https://www.youtube.com/user/SpringSourceDev) [{: style="width:7%"}](https://www.youtube.com/c/Quarkusio) [{: style="width:7%"}](https://www.youtube.com/c/Lightbend-TV) [{: style="width:7%"}](https://www.youtube.com/c/postman) [{: style="width:7%"}](https://www.youtube.com/c/Smartbear) [{: style="width:7%"}](https://www.youtube.com/c/JFrogInc) [{: style="width:7%"}](https://www.youtube.com/c/Sonatypeinc) [{: style="width:7%"}](https://www.youtube.com/channel/UCS5-gTYteN9rnFd98YxYtrA) [{: style="width:7%"}](https://www.youtube.com/c/GoogleChromeDevelopers) [{: style="width:7%"}](https://www.youtube.com/c/MozillaDeveloper)<br/>
|
||||
[{: style="width:7%"}](https://www.youtube.com/c/CrunchyDataPostgres) [{: style="width:7%"}](https://www.youtube.com/channel/UC5qMsRjObu685rTBq0PJX8w) [{: style="width:7%"}](https://www.youtube.com/c/cockroachdb) [{: style="width:7%"}](https://www.youtube.com/c/MongoDBofficial) [{: style="width:7%"}](https://www.youtube.com/c/Redisinc) [{: style="width:7%"}](https://www.youtube.com/c/Confluent) [{: style="width:7%"}](https://www.youtube.com/channel/UCud7fErZAyMC6lHT_cWZNfA) [{: style="width:7%"}](https://www.youtube.com/channel/UC3ywadaAUQ1FI4YsHZ8wa0g) [{: style="width:7%"}](https://www.youtube.com/channel/UCm63IQg81KP9vXRWSHQpu1w) [{: style="width:7%"}](https://www.youtube.com/channel/UCt7N400Z8gB_3yKq1qrjP2w) [{: style="width:7%"}](https://www.youtube.com/c/Portworx)<br/>
|
||||
[{: style="width:7%"}](https://www.youtube.com/c/Cloudacademy) [{: style="width:7%"}](https://www.youtube.com/c/AcloudGuru) [{: style="width:7%"}](https://www.youtube.com/c/Devopsdotcom) [{: style="width:7%"}](https://www.youtube.com/c/XebiaLabs) [{: style="width:7%"}](https://www.youtube.com/c/Devopslibrary) [{: style="width:7%"}](https://www.youtube.com/c/codecademy) [{: style="width:7%"}](https://www.youtube.com/user/coursera) [{: style="width:7%"}](https://www.youtube.com/c/Academind) [{: style="width:7%"}](https://www.youtube.com/c/guru99comm) [{: style="width:7%"}](https://www.youtube.com/c/Intellipaat) [{: style="width:7%"}](https://www.youtube.com/channel/UCv9MUffHWyo2GgLIDLVu0KQ)<br/>
|
||||
@@ -351,7 +351,8 @@ A curated list of awesome references collected since 2018. Microservices archite
|
||||
[{: style="width:7%"}](https://www.youtube.com/c/LondonIAC) [{: style="width:7%"}](https://www.youtube.com/c/TechWorldwithNana) [{: style="width:7%"}](https://www.youtube.com/c/Honeypotio) [{: style="width:7%"}](https://www.youtube.com/c/AliSpittelDev) [{: style="width:7%"}](https://www.youtube.com/c/ThomasMaurerCloud) [{: style="width:7%"}](https://www.youtube.com/c/Freecodecamp) [{: style="width:7%"}](https://www.youtube.com/c/TheNewStack) [{: style="width:7%"}](https://www.youtube.com/channel/UCOvYmppcbOPm1viN6ust3lA) [{: style="width:7%"}](https://www.youtube.com/channel/UCoZxt-YMhGHb20ZkvcCc5KA) [{: style="width:7%"}](https://www.youtube.com/c/ContainerDays) [{: style="width:7%"}](https://www.youtube.com/c/priyankavergadia)<br/>
|
||||
[{: style="width:7%"}](https://www.youtube.com/c/ContinuousDeliveryFoundation) [{: style="width:7%"}](https://www.youtube.com/c/TinaHuang1) [{: style="width:7%"}](https://www.youtube.com/c/AzureDevOps) [{: style="width:7%"}](https://www.youtube.com/channel/UC2Pk9GcHhlVV0R9CQIU6gLw) [{: style="width:7%"}](https://www.youtube.com/c/AlibabaCloud) [{: style="width:7%"}](https://www.youtube.com/c/linode) [{: style="width:7%"}](https://www.youtube.com/channel/UCB5WMc2FfrxKzfd7XIODoMw) [{: style="width:7%"}](https://www.youtube.com/c/MadeByGPS) [{: style="width:7%"}](https://www.youtube.com/c/keptn) [{: style="width:7%"}](https://www.youtube.com/c/AnaisUrlichs) [{: style="width:7%"}](https://www.youtube.com/c/TheDigitalLifeTech)<br/>
|
||||
[{: style="width:7%"}](https://www.youtube.com/@azure-terraformer) [{: style="width:7%"}](https://www.youtube.com/@NedintheCloud) [{: style="width:7%"}](https://www.youtube.com/@NetBoxLabs) [{: style="width:7%"}](https://www.youtube.com/@techwithhelen) [{: style="width:7%"}](https://www.youtube.com/@ByteByteGo) [{: style="width:7%"}](https://www.youtube.com/@DotCSV) [{: style="width:7%"}](https://www.youtube.com/@midulive) [{: style="width:7%"}](https://www.youtube.com/@returngis) [{: style="width:7%"}](https://www.youtube.com/@kubefm) [{: style="width:7%"}](https://www.youtube.com/@OlenaKutsenko) [{: style="width:7%"}](https://www.youtube.com/@mouredev)<br/>
|
||||
[{: style="width:7%"}](https://www.youtube.com/@CloudNativeMadrid) [{: style="width:7%"}](https://www.youtube.com/@kyndryl)
|
||||
[{: style="width:7%"}](https://www.youtube.com/@CloudNativeMadrid) [{: style="width:7%"}](https://www.youtube.com/@kyndryl) [{: style="width:7%"}](https://www.youtube.com/@ITOpsTalk) [{: style="width:7%"}](https://www.youtube.com/@googlecloudtech) [{: style="width:7%"}](https://www.youtube.com/@GoogleGemini) [{: style="width:7%"}](https://www.youtube.com/@googledeepmind) [{: style="width:7%"}](https://www.youtube.com/@anthropic-ai) [{: style="width:7%"}](https://www.youtube.com/@Microsoft.Copilot) [{: style="width:7%"}](https://www.youtube.com/OpenAI) [{: style="width:7%"}](https://www.youtube.com/@aiatmeta) [{: style="width:7%"}](https://www.youtube.com/@MicrosoftReactor)<br/>
|
||||
[{: style="width:7%"}](https://www.youtube.com/@Playwrightdev) [{: style="width:7%"}](https://www.youtube.com/@arsys) [{: style="width:7%"}](https://www.youtube.com/@ClickHouseDB) [{: style="width:7%"}](https://www.youtube.com/@gustavo-entrala)
|
||||
|
||||
</center>
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
|
||||
<center markdown="1">
|
||||
|
||||
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A/api.soundcloud.com/tracks/410107842&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/hugoboomin" title="Hugo Boomin ⚡️ 🔥 💥" target="_blank" style="color: #cccccc; text-decoration: none;">Hugo Boomin ⚡️ 🔥 💥</a> · <a href="https://soundcloud.com/hugoboomin/jimmy-sax-live-at-nikki-beach-st-tropez-opus-eric-prydz" title="Jimmy Sax - Live At Nikki Beach St Tropez (Opus - Eric Prydz)" target="_blank" style="color: #cccccc; text-decoration: none;">Jimmy Sax - Live At Nikki Beach St Tropez (Opus - Eric Prydz)</a></div>
|
||||
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/410107842&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/hugoboomin" title="Hugo Boomin ⚡️ 🔥 💥" target="_blank" style="color: #cccccc; text-decoration: none;">Hugo Boomin ⚡️ 🔥 💥</a> · <a href="https://soundcloud.com/hugoboomin/jimmy-sax-live-at-nikki-beach-st-tropez-opus-eric-prydz" title="Jimmy Sax - Live At Nikki Beach St Tropez (Opus - Eric Prydz)" target="_blank" style="color: #cccccc; text-decoration: none;">Jimmy Sax - Live At Nikki Beach St Tropez (Opus - Eric Prydz)</a></div>
|
||||
|
||||
</center>
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
<center markdown="1">
|
||||
|
||||
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A/api.soundcloud.com/tracks/604265532&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/tlotfy99" title="Abou Seif 🧿" target="_blank" style="color: #cccccc; text-decoration: none;">Abou Seif 🧿</a> · <a href="https://soundcloud.com/tlotfy99/no-man-no-cry-jimmy-sax" title="no man no cry - jimmy sax" target="_blank" style="color: #cccccc; text-decoration: none;">no man no cry - jimmy sax</a></div>
|
||||
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/340111054&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/jimmy-sax" title="Jimmy Sax" target="_blank" style="color: #cccccc; text-decoration: none;">Jimmy Sax</a> · <a href="https://soundcloud.com/jimmy-sax/no-man-no-cry-jimmy-sax-version" title="no man no cry - jimmy sax" target="_blank" style="color: #cccccc; text-decoration: none;">no man no cry - jimmy sax</a></div>
|
||||
|
||||
</center>
|
||||
|
||||
@@ -191,13 +191,9 @@
|
||||
|
||||
- [ewsolutions.com: Worst Project Management Practices](https://www.ewsolutions.com/worst-project-management-practices)
|
||||
|
||||
### DevDriven.By
|
||||
### Promotion-Based Development
|
||||
|
||||
- [devdriven.by](https://devdriven.by)
|
||||
|
||||
### Promotion Driven Development
|
||||
|
||||
- [devdriven.by: Promotion Driven Development](https://devdriven.by/promotion) When you write code to increase your visibility with management, let things break so that you can be the hero that fixes them and generally work on things that lead to a corner office asap
|
||||
- [Promotion-Based Development: A Fast Track to Mediocrity](https://vadimkravcenko.com/shorts/promotion-based-development/) When you write code to increase your visibility with management, let things break so that you can be the hero that fixes them and generally work on things that lead to a corner office asap
|
||||
- [nichesoftware.co.nz: Promotion Driven Development (PDD) 🌟](http://www.nichesoftware.co.nz/2021/05/29/promotion-driven-development.html)
|
||||
- [reddit.com: Promotion Driven Development](https://www.reddit.com/r/ExperiencedDevs/comments/pw6vuv/promotion_driven_development)
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
<center markdown="1">
|
||||
|
||||
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A/api.soundcloud.com/tracks/162899288&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/arielmezzapesa-1" title="Ariel Mezzapesa" target="_blank" style="color: #cccccc; text-decoration: none;">Ariel Mezzapesa</a> · <a href="https://soundcloud.com/arielmezzapesa-1/lily-was-here-candy-dulfer" title="Lily Was Here (Candy Dulfer)" target="_blank" style="color: #cccccc; text-decoration: none;">Lily Was Here (Candy Dulfer)</a></div>
|
||||
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/162899288&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/arielmezzapesa-1" title="Ariel Mezzapesa" target="_blank" style="color: #cccccc; text-decoration: none;">Ariel Mezzapesa</a> · <a href="https://soundcloud.com/arielmezzapesa-1/lily-was-here-candy-dulfer" title="Lily Was Here (Candy Dulfer)" target="_blank" style="color: #cccccc; text-decoration: none;">Lily Was Here (Candy Dulfer)</a></div>
|
||||
|
||||
</center>
|
||||
|
||||
|
||||
@@ -35,4 +35,21 @@ reset max-width with the following CSS: */
|
||||
.someid { color: green; }
|
||||
*/
|
||||
|
||||
.channel-logo {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
object-fit: contain;
|
||||
margin: 6px;
|
||||
transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), filter 0.25s ease;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.channel-logo:hover {
|
||||
transform: scale(1.15);
|
||||
filter: brightness(1.2);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -136,6 +136,33 @@ a {
|
||||
text-shadow: 0 0 8px rgba(6, 182, 212, 0.4);
|
||||
}
|
||||
|
||||
/* Fix mobile navigation drawer header and repository section contrast in dark mode */
|
||||
@media screen and (max-width: 76.1875em) {
|
||||
[data-md-color-scheme="slate"] .md-nav--primary .md-nav__title {
|
||||
background-color: #18181b !important; /* Solid Zinc 900 for dark mode */
|
||||
color: #ffffff !important;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.08) !important;
|
||||
}
|
||||
|
||||
[data-md-color-scheme="slate"] .md-nav--primary .md-nav__title .md-logo svg,
|
||||
[data-md-color-scheme="slate"] .md-nav--primary .md-nav__title .md-logo img {
|
||||
fill: #ffffff !important;
|
||||
}
|
||||
|
||||
[data-md-color-scheme="slate"] .md-nav--primary .md-nav__title .md-icon {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
|
||||
[data-md-color-scheme="slate"] .md-nav__source {
|
||||
background-color: #0f0f11 !important; /* Solid Zinc 950 / dark background */
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.08) !important;
|
||||
}
|
||||
|
||||
[data-md-color-scheme="slate"] .md-source {
|
||||
color: #ffffff !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Elegant Table Rows (Audit Matrix) */
|
||||
.md-typeset table tr {
|
||||
transition: background-color 0.2s ease-in-out, transform 0.2s ease;
|
||||
@@ -178,3 +205,288 @@ a {
|
||||
text-shadow: 0 0 5px rgba(251, 191, 36, 0.4);
|
||||
}
|
||||
|
||||
.channel-logo {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
object-fit: contain;
|
||||
margin: 6px;
|
||||
transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), filter 0.25s ease;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.channel-logo:hover {
|
||||
transform: scale(1.15);
|
||||
filter: brightness(1.25);
|
||||
box-shadow: 0 0 12px var(--md-accent-fg-color);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
/* V2 Homepage Hero Dashboard Cards */
|
||||
.hero-badge-card {
|
||||
flex: 1;
|
||||
max-width: 280px;
|
||||
min-width: 200px;
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
border-radius: 16px;
|
||||
padding: 24px 16px;
|
||||
text-align: center;
|
||||
background: rgba(255, 255, 255, 0.015);
|
||||
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.hero-badge-card img {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
object-fit: contain;
|
||||
margin-bottom: 12px;
|
||||
transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), filter 0.25s ease;
|
||||
}
|
||||
|
||||
.hero-badge-card:hover {
|
||||
transform: translateY(-4px);
|
||||
}
|
||||
|
||||
.hero-badge-card:hover img {
|
||||
transform: scale(1.15);
|
||||
filter: brightness(1.25);
|
||||
}
|
||||
|
||||
/* Modifiers for custom theme accents */
|
||||
.hero-badge-card--cyan {
|
||||
border-color: rgba(34, 211, 238, 0.15);
|
||||
background: rgba(34, 211, 238, 0.015);
|
||||
}
|
||||
.hero-badge-card--cyan:hover {
|
||||
background: rgba(34, 211, 238, 0.04) !important;
|
||||
box-shadow: 0 8px 24px rgba(34, 211, 238, 0.15);
|
||||
border-color: #22d3ee !important;
|
||||
}
|
||||
|
||||
.hero-badge-card--purple {
|
||||
border-color: rgba(139, 92, 246, 0.15);
|
||||
background: rgba(139, 92, 246, 0.015);
|
||||
}
|
||||
.hero-badge-card--purple:hover {
|
||||
background: rgba(139, 92, 246, 0.04) !important;
|
||||
box-shadow: 0 8px 24px rgba(139, 92, 246, 0.15);
|
||||
border-color: #a78bfa !important;
|
||||
}
|
||||
|
||||
.hero-badge-card--pink {
|
||||
border-color: rgba(236, 72, 153, 0.15);
|
||||
background: rgba(236, 72, 153, 0.015);
|
||||
}
|
||||
.hero-badge-card--pink:hover {
|
||||
background: rgba(236, 72, 153, 0.04) !important;
|
||||
box-shadow: 0 8px 24px rgba(236, 72, 153, 0.15);
|
||||
border-color: #f472b6 !important;
|
||||
}
|
||||
|
||||
.hero-badge-card--teal {
|
||||
border-color: rgba(20, 184, 166, 0.15);
|
||||
background: rgba(20, 184, 166, 0.015);
|
||||
}
|
||||
.hero-badge-card--teal:hover {
|
||||
background: rgba(20, 184, 166, 0.04) !important;
|
||||
box-shadow: 0 8px 24px rgba(20, 184, 166, 0.15);
|
||||
border-color: #2dd4bf !important;
|
||||
}
|
||||
|
||||
.hero-badge-title {
|
||||
font-weight: bold;
|
||||
font-size: 0.95rem;
|
||||
color: var(--md-primary-fg-color);
|
||||
}
|
||||
|
||||
.hero-badge-subtitle {
|
||||
font-size: 0.78rem;
|
||||
color: var(--md-primary-fg-color--dark);
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
/* Hero Showcase Image wrapper (4 cars in a container) */
|
||||
.hero-showcase-wrapper {
|
||||
margin: 24px auto;
|
||||
max-width: 1100px; /* Increased from 650px to make it responsive and as large as possible */
|
||||
width: 100%;
|
||||
border-radius: 16px;
|
||||
overflow: hidden;
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
background: rgba(255, 255, 255, 0.015);
|
||||
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
|
||||
transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
position: relative;
|
||||
display: block;
|
||||
}
|
||||
|
||||
[data-md-color-scheme="slate"] .hero-showcase-wrapper {
|
||||
border-color: rgba(34, 211, 238, 0.1);
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.hero-showcase-link {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.hero-showcase-image {
|
||||
width: 100% !important;
|
||||
display: block;
|
||||
object-fit: cover;
|
||||
transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1), filter 0.4s ease;
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
.hero-showcase-footer {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 14px 20px;
|
||||
background: rgba(9, 9, 11, 0.5);
|
||||
backdrop-filter: blur(8px);
|
||||
-webkit-backdrop-filter: blur(8px);
|
||||
border-top: 1px solid rgba(255, 255, 255, 0.06);
|
||||
gap: 16px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
[data-md-color-scheme="slate"] .hero-showcase-footer {
|
||||
background: rgba(0, 0, 0, 0.6);
|
||||
}
|
||||
|
||||
.hero-showcase-badge {
|
||||
background: rgba(34, 211, 238, 0.1);
|
||||
border: 1px solid rgba(34, 211, 238, 0.3);
|
||||
color: var(--md-accent-fg-color);
|
||||
font-size: 0.72rem;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
padding: 4px 10px;
|
||||
border-radius: 20px;
|
||||
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
|
||||
letter-spacing: 0.05em;
|
||||
transition: all 0.3s ease;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.hero-showcase-caption {
|
||||
font-size: 0.8rem;
|
||||
color: var(--md-primary-fg-color--dark);
|
||||
text-align: right;
|
||||
flex: 1;
|
||||
min-width: 250px;
|
||||
line-height: 1.4;
|
||||
transition: color 0.3s ease;
|
||||
}
|
||||
|
||||
/* Hover effects */
|
||||
.hero-showcase-wrapper:hover {
|
||||
transform: translateY(-4px);
|
||||
border-color: var(--md-accent-fg-color);
|
||||
box-shadow: 0 12px 30px rgba(34, 211, 238, 0.15);
|
||||
}
|
||||
|
||||
.hero-showcase-wrapper:hover .hero-showcase-image {
|
||||
transform: scale(1.02); /* slightly reduced zoom to keep it elegant */
|
||||
filter: brightness(1.05) contrast(1.02);
|
||||
}
|
||||
|
||||
.hero-showcase-wrapper:hover .hero-showcase-footer {
|
||||
border-top-color: rgba(34, 211, 238, 0.3);
|
||||
background: rgba(34, 211, 238, 0.02) !important;
|
||||
}
|
||||
|
||||
.hero-showcase-wrapper:hover .hero-showcase-badge {
|
||||
background: var(--md-accent-fg-color);
|
||||
color: #09090b;
|
||||
box-shadow: 0 0 10px var(--md-accent-fg-color);
|
||||
}
|
||||
|
||||
.hero-showcase-wrapper:hover .hero-showcase-caption {
|
||||
color: var(--md-primary-fg-color);
|
||||
}
|
||||
|
||||
/* Clickable Quote Card */
|
||||
.quote-card-link {
|
||||
display: block;
|
||||
text-decoration: none !important;
|
||||
color: inherit !important;
|
||||
margin: 28px auto;
|
||||
max-width: 1100px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.quote-card {
|
||||
padding: 28px 36px;
|
||||
border-radius: 14px;
|
||||
border: 1px dashed rgba(34, 211, 238, 0.25);
|
||||
background: rgba(34, 211, 238, 0.005);
|
||||
position: relative;
|
||||
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
[data-md-color-scheme="slate"] .quote-card {
|
||||
background: rgba(34, 211, 238, 0.015);
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.quote-card::before {
|
||||
content: '“';
|
||||
position: absolute;
|
||||
top: -10px;
|
||||
left: 24px;
|
||||
font-size: 4.5rem;
|
||||
font-family: Georgia, serif;
|
||||
color: rgba(34, 211, 238, 0.25);
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.quote-card-text {
|
||||
font-size: 1.15rem;
|
||||
font-style: italic;
|
||||
font-weight: 500;
|
||||
line-height: 1.6;
|
||||
margin-bottom: 10px;
|
||||
color: var(--md-primary-fg-color);
|
||||
transition: color 0.3s ease;
|
||||
}
|
||||
|
||||
[data-md-color-scheme="slate"] .quote-card-text {
|
||||
color: #e2e8f0;
|
||||
}
|
||||
|
||||
.quote-card-author {
|
||||
font-size: 0.85rem;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.12em;
|
||||
color: var(--md-accent-fg-color);
|
||||
transition: text-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
/* Quote Hover effects */
|
||||
.quote-card-link:hover .quote-card {
|
||||
transform: translateY(-2px);
|
||||
border-style: solid;
|
||||
border-color: var(--md-accent-fg-color);
|
||||
background: rgba(34, 211, 238, 0.03) !important;
|
||||
box-shadow: 0 8px 24px rgba(34, 211, 238, 0.18);
|
||||
}
|
||||
|
||||
.quote-card-link:hover .quote-card-text {
|
||||
color: #ffffff;
|
||||
text-shadow: 0 0 10px rgba(255, 255, 255, 0.35);
|
||||
}
|
||||
|
||||
.quote-card-link:hover .quote-card-author {
|
||||
text-shadow: 0 0 8px rgba(34, 211, 238, 0.5);
|
||||
}
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
<center markdown="1">
|
||||
|
||||
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A/api.soundcloud.com/tracks/468480528&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/raymond-mnt" title="RAYMOND MNT" target="_blank" style="color: #cccccc; text-decoration: none;">RAYMOND MNT</a> · <a href="https://soundcloud.com/raymond-mnt/jimmy-sax-parga-oriental-sax" title="Jimmy Sax - Parga (Oriental sax ).mp3" target="_blank" style="color: #cccccc; text-decoration: none;">Jimmy Sax - Parga (Oriental sax ).mp3</a></div>
|
||||
<iframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/468480528&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe><div style="font-size: 10px; color: #cccccc;line-break: anywhere;word-break: normal;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; font-family: Interstate,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Garuda,Verdana,Tahoma,sans-serif;font-weight: 100;"><a href="https://soundcloud.com/raymond-mnt" title="RAYMOND MNT" target="_blank" style="color: #cccccc; text-decoration: none;">RAYMOND MNT</a> · <a href="https://soundcloud.com/raymond-mnt/jimmy-sax-parga-oriental-sax" title="Jimmy Sax - Parga (Oriental sax ).mp3" target="_blank" style="color: #cccccc; text-decoration: none;">Jimmy Sax - Parga (Oriental sax ).mp3</a></div>
|
||||
|
||||
</center>
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
# Securing Rare and Inactive Usernames on X
|
||||
|
||||
Getting a highly sought-after handle on social media can be challenging, but X (formerly Twitter) has introduced a streamlined way for power users, brands, and creators to claim inactive or rare usernames.
|
||||
|
||||
## Requirements
|
||||
|
||||
To participate in the handle acquisition process, users must meet specific platform criteria:
|
||||
* Maintain an active Premium or Premium+ subscription.
|
||||
* Have a verified account in good standing.
|
||||
* Be prepared to pay the associated fees for high-value or highly sought-after handles.
|
||||
|
||||
## Accessing the Marketplace
|
||||
|
||||
If you meet the requirements and wish to claim a specific inactive handle, you can begin the process through the [X Handle Marketplace Portal](https://handles.x.com/login). This is the official workspace portal for X's Handle Marketplace, allowing verified Premium subscribers to request, secure, and purchase inactive and rare usernames safely.
|
||||
|
||||
## Best Practices
|
||||
|
||||
* **Avoid Third-Party Brokers:** Always use the official portal linked above to avoid phishing attempts and scams. Buying handles outside of official channels violates X's Terms of Service and can result in account suspension.
|
||||
* **Prepare Alternatives:** Have a few backup username options in mind just in case your primary choice is not deemed "inactive" by X's internal metrics.
|
||||
* **Trademark Considerations:** If you hold a registered trademark for the requested handle, make sure to submit the relevant documentation to expedite the process.
|
||||
@@ -1,5 +1,5 @@
|
||||
site_name: Nubenetes
|
||||
site_url: https://nubenetes.com
|
||||
site_url: https://nubenetes.com/
|
||||
site_description: A curated list of awesome IT projects and resources. Inspired by the awesome list.
|
||||
site_author: nubenetes@gmail.com
|
||||
docs_dir: docs/
|
||||
@@ -13,7 +13,7 @@ theme:
|
||||
icon:
|
||||
logo: logo
|
||||
repo: fontawesome/brands/github
|
||||
favicon: images/favicon-car-modern.png
|
||||
favicon: images/favicon-ultra.png
|
||||
palette:
|
||||
- scheme: default
|
||||
primary: indigo
|
||||
@@ -85,6 +85,7 @@ markdown_extensions:
|
||||
- abbr
|
||||
- def_list
|
||||
nav:
|
||||
- "🚀 Try Nubenetes V2 (Elite Portal)": https://nubenetes.com/v2/
|
||||
- Home: index.md
|
||||
- Intro:
|
||||
- Microservice Architecture. From Java EE To Cloud Native. Openshift VS Kubernetes: introduction.md
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
site_name: Nubenetes
|
||||
site_url: https://nubenetes.com
|
||||
site_url: https://nubenetes.com/
|
||||
site_description: A curated list of awesome IT projects and resources. Inspired by the awesome list.
|
||||
site_author: "Nubenetes"
|
||||
docs_dir: docs/
|
||||
use_directory_urls: false
|
||||
use_directory_urls: true
|
||||
#repo_name: 'GitHub'
|
||||
repo_name: nubenetes/awesome-kubernetes
|
||||
repo_url: https://github.com/nubenetes/awesome-kubernetes
|
||||
@@ -11,7 +11,7 @@ edit_uri: ""
|
||||
theme:
|
||||
name: material
|
||||
prev_next_buttons_location: both
|
||||
favicon: images/favicon-modern.png
|
||||
favicon: images/favicon-ultra.png
|
||||
icon:
|
||||
logo: logo
|
||||
repo: fontawesome/brands/github
|
||||
@@ -56,7 +56,7 @@ plugins:
|
||||
background_color: "#263238"
|
||||
font_family: "Inter"
|
||||
custom_dir: "docs/images/"
|
||||
logo: favicon-car-modern.png
|
||||
logo: favicon-ultra.png
|
||||
extra_css:
|
||||
- static/extra.css
|
||||
extra_javascript:
|
||||
@@ -99,7 +99,7 @@ markdown_extensions:
|
||||
- abbr
|
||||
- def_list
|
||||
nav:
|
||||
- "🚀 Try Nubenetes V2 (Elite)": https://nubenetes.com/v2/
|
||||
- "🚀 Try Nubenetes V2 (Elite Portal)": https://nubenetes.com/v2/
|
||||
- Home: index.md
|
||||
- Intro:
|
||||
- Microservice Architecture. From Java EE To Cloud Native. Openshift VS Kubernetes: introduction.md
|
||||
@@ -290,6 +290,7 @@ nav:
|
||||
- Freelancing: freelancing.md
|
||||
- Remote Tech Jobs: remote-tech-jobs.md
|
||||
- Clients: customer.md
|
||||
- Uncategorized: uncategorized.md
|
||||
- About: about.md
|
||||
copyright: 2026 <a href="https://twitter.com/nubenetes">Nubenetes</a>, <a href="https://nubenetes.com/about/">about</a>.
|
||||
extra:
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
mkdocs-material>=9.5.0
|
||||
pymdown-extensions>=10.8.1
|
||||
mkdocs-material>=9.7.6
|
||||
pymdown-extensions>=10.21.3
|
||||
yt-dlp
|
||||
youtube-transcript-api
|
||||
mkdocs-redirects>=1.2.3
|
||||
mkdocs-minify-plugin>=0.8.0
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M9 5.938V17c0 4.971 4.029 9 9 9s9-4.029 9-9V6.25L9 5.938z"/><path fill="#C1694F" d="M14 22h8s-1 2-4 2-4-2-4-2z"/><path fill="#662113" d="M14 16c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1zm8 0c-.552 0-1-.448-1-1v-1c0-.552.448-1 1-1s1 .448 1 1v1c0 .552-.448 1-1 1z"/><path fill="#C1694F" d="M19 19.5h-2c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h2c.276 0 .5.224.5.5s-.224.5-.5.5z"/><path fill="#FFDC5D" d="M10.847 13.715c0 1.58-.8 2.861-1.788 2.861s-1.788-1.281-1.788-2.861c0-1.58.801-2.861 1.788-2.861s1.788 1.281 1.788 2.861zm17.882 0c0 1.58-.8 2.861-1.788 2.861s-1.788-1.281-1.788-2.861c0-1.58.8-2.861 1.788-2.861s1.788 1.281 1.788 2.861z"/><path fill="#FFAC33" d="M18 .823c-7.019 0-10.139 4.684-10.139 8.588 0 3.903 1.343 4.986 1.56 3.903.78-3.903 3.12-5.101 3.12-5.101 4.68 3.904 3.9.781 3.9.781 4.679 4.684 2.34 0 2.34 0 1.56 1.562 6.239 1.562 6.239 1.562s.78 1.198 1.559 2.759c.78 1.562 1.56 0 1.56-3.903 0-3.905-3.9-8.589-10.139-8.589z"/><path fill="#FFDC5D" d="M12.421 2.935c-.591-.389-1.387-.224-1.776.367L10 4.284V2c0-1.105-.896-2-2-2H4C2.896 0 2 .896 2 2v8s0 1 1 1h6l1-1V8.957l2.789-4.246c.389-.592.225-1.387-.368-1.776z"/><path fill="#EF9645" d="M4 0h1v5H4zm3 0h1v5H7z"/><path fill="#4289C1" d="M27 27H9l1-17H2v17s0 9 8 9h21v-5c0-2.209-1.791-4-4-4z"/><path fill="#2A6797" d="M26 32h1v4h-1z"/><path fill="#FFDC5D" d="M15 24v4c0 1.657 1.343 3 3 3s3-1.343 3-3v-4h-6z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 5.7 KiB |
@@ -0,0 +1,756 @@
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkC3kaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkAnkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCnkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBXkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
/* math */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkenkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;
|
||||
}
|
||||
/* symbols */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkaHkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCXkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCHkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBnka.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkC3kaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkAnkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCnkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBXkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
/* math */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkenkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;
|
||||
}
|
||||
/* symbols */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkaHkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCXkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCHkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBnka.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkC3kaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkAnkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCnkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBXkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
/* math */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkenkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;
|
||||
}
|
||||
/* symbols */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkaHkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCXkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkCHkaWzU.woff2) format('woff2');
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO5CnqEu92Fr1Mu53ZEC9_Vu3r1gIhOszmkBnka.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
/* math */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;
|
||||
}
|
||||
/* symbols */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
/* math */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;
|
||||
}
|
||||
/* symbols */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+1F00-1FFF;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
/* math */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;
|
||||
}
|
||||
/* symbols */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2) format('woff2');
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-stretch: 100%;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x7DF4xlVMF-BfR8bXMIjhOm3CWWoKC.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x7DF4xlVMF-BfR8bXMIjhOm3mWWoKC.woff2) format('woff2');
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x7DF4xlVMF-BfR8bXMIjhOm36WWoKC.woff2) format('woff2');
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x7DF4xlVMF-BfR8bXMIjhOm3KWWoKC.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x7DF4xlVMF-BfR8bXMIjhOm3OWWoKC.woff2) format('woff2');
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x7DF4xlVMF-BfR8bXMIjhOm32WWg.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x7DF4xlVMF-BfR8bXMIjhOm3CWWoKC.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x7DF4xlVMF-BfR8bXMIjhOm3mWWoKC.woff2) format('woff2');
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x7DF4xlVMF-BfR8bXMIjhOm36WWoKC.woff2) format('woff2');
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x7DF4xlVMF-BfR8bXMIjhOm3KWWoKC.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x7DF4xlVMF-BfR8bXMIjhOm3OWWoKC.woff2) format('woff2');
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x7DF4xlVMF-BfR8bXMIjhOm32WWg.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x5DF4xlVMF-BfR8bXMIjhGq3-OXg.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x5DF4xlVMF-BfR8bXMIjhPq3-OXg.woff2) format('woff2');
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x5DF4xlVMF-BfR8bXMIjhIq3-OXg.woff2) format('woff2');
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x5DF4xlVMF-BfR8bXMIjhEq3-OXg.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x5DF4xlVMF-BfR8bXMIjhFq3-OXg.woff2) format('woff2');
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x5DF4xlVMF-BfR8bXMIjhLq38.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
/* cyrillic-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x5DF4xlVMF-BfR8bXMIjhGq3-OXg.woff2) format('woff2');
|
||||
unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||
}
|
||||
/* cyrillic */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x5DF4xlVMF-BfR8bXMIjhPq3-OXg.woff2) format('woff2');
|
||||
unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||
}
|
||||
/* greek */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x5DF4xlVMF-BfR8bXMIjhIq3-OXg.woff2) format('woff2');
|
||||
unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;
|
||||
}
|
||||
/* vietnamese */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x5DF4xlVMF-BfR8bXMIjhEq3-OXg.woff2) format('woff2');
|
||||
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
|
||||
}
|
||||
/* latin-ext */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x5DF4xlVMF-BfR8bXMIjhFq3-OXg.woff2) format('woff2');
|
||||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||
}
|
||||
/* latin */
|
||||
@font-face {
|
||||
font-family: 'Roboto Mono';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: fallback;
|
||||
src: url(../fonts.gstatic.com/s/robotomono/v31/L0x5DF4xlVMF-BfR8bXMIjhLq38.woff2) format('woff2');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||