π¨ docs: replace features SVG with new PNG (imagejustapi)
swadhinbiswas committed 2 months ago
e568aae
1 parent 5a3085e
commit e568aae
3 files changed
+1 -142
Showing 3 changed files+1-142
βΌREADME.md
+1-1
| @@ -153,7 +153,7 @@ body and writes the response. That is the ~700k req/s path. | ||
153 | 153 | ## Feature highlights |
154 | 154 | |
155 | 155 | <p align="center"> |
156 | - <img src="assets/justapi-features.svg" alt="Feature matrix" width="100%"> | |
156 | + <img src="assets/justapi-features.png" alt="Feature matrix" width="100%"> | |
157 | 157 | </p> |
158 | 158 | |
159 | 159 | <table> |
160 | 160 | |
βΌassets/justapi-features.png
+0-0
Binary file not shown.
βΌassets/justapi-features.svg
+0-141
| @@ -1,141 +0,0 @@ | ||
1 | -<svg width="1200" height="560" viewBox="0 0 1200 560" fill="none" xmlns="http://www.w3.org/2000/svg"> | |
2 | - <defs> | |
3 | - <linearGradient id="bg4" x1="0" y1="0" x2="1200" y2="560" gradientUnits="userSpaceOnUse"> | |
4 | - <stop stop-color="#0b0e1a"/> | |
5 | - <stop offset="1" stop-color="#111631"/> | |
6 | - </linearGradient> | |
7 | - <radialGradient id="core" cx="0.5" cy="0.5" r="0.5"> | |
8 | - <stop offset="0" stop-color="#e6522c" stop-opacity="0.3"/> | |
9 | - <stop offset="1" stop-color="#e6522c" stop-opacity="0"/> | |
10 | - </radialGradient> | |
11 | - </defs> | |
12 | - | |
13 | - <rect width="1200" height="560" fill="url(#bg4)"/> | |
14 | - <circle cx="600" cy="270" r="260" fill="url(#core)"> | |
15 | - <animate attributeName="r" values="240;270;240" dur="6s" repeatCount="indefinite"/> | |
16 | - </circle> | |
17 | - | |
18 | - <!-- center --> | |
19 | - <text x="600" y="255" text-anchor="middle" font-family="'Segoe UI', Arial, sans-serif" font-size="34" font-weight="900" fill="#e6522c" letter-spacing="2">JUSTAPI</text> | |
20 | - <text x="600" y="285" text-anchor="middle" font-family="'Segoe UI', Arial, sans-serif" font-size="13" fill="#94a3b8">Rust core Β· Python surface</text> | |
21 | - | |
22 | - <!-- feature nodes: (cx, cy, icon, title, sub) --> | |
23 | - <!-- 12 nodes in 3 rings of 4 --> | |
24 | - <g font-family="'Segoe UI', Arial, sans-serif"> | |
25 | - <!-- ring A: performance --> | |
26 | - <g> | |
27 | - <circle cx="600" cy="70" r="34" fill="#1e293b" stroke="#f5a524" stroke-width="2"/> | |
28 | - <text x="600" y="66" text-anchor="middle" font-size="20">β‘</text> | |
29 | - <text x="600" y="86" text-anchor="middle" font-size="11" fill="#f5a524" font-weight="700">766k req/s</text> | |
30 | - <circle cx="600" cy="70" r="3" fill="#f5a524"> | |
31 | - <animate attributeName="opacity" values="1;0.2;1" dur="1.6s" repeatCount="indefinite"/> | |
32 | - </circle> | |
33 | - <text x="600" y="125" text-anchor="middle" font-size="12" fill="#94a3b8">hello-world native</text> | |
34 | - </g> | |
35 | - | |
36 | - <g> | |
37 | - <circle cx="1130" cy="270" r="34" fill="#1e293b" stroke="#22d3ee" stroke-width="2"/> | |
38 | - <text x="1130" y="266" text-anchor="middle" font-size="20">ποΈ</text> | |
39 | - <text x="1130" y="286" text-anchor="middle" font-size="11" fill="#22d3ee" font-weight="700">native DB awaits</text> | |
40 | - <circle cx="1130" cy="270" r="3" fill="#22d3ee"> | |
41 | - <animate attributeName="opacity" values="1;0.2;1" dur="1.8s" repeatCount="indefinite"/> | |
42 | - </circle> | |
43 | - <text x="1130" y="325" text-anchor="middle" font-size="12" fill="#94a3b8">query_async Β· 53x</text> | |
44 | - </g> | |
45 | - | |
46 | - <g> | |
47 | - <circle cx="600" cy="470" r="34" fill="#1e293b" stroke="#8b5cf6" stroke-width="2"/> | |
48 | - <text x="600" y="466" text-anchor="middle" font-size="20">π§ </text> | |
49 | - <text x="600" y="486" text-anchor="middle" font-size="11" fill="#8b5cf6" font-weight="700">free-threaded</text> | |
50 | - <circle cx="600" cy="470" r="3" fill="#8b5cf6"> | |
51 | - <animate attributeName="opacity" values="1;0.2;1" dur="2s" repeatCount="indefinite"/> | |
52 | - </circle> | |
53 | - <text x="600" y="525" text-anchor="middle" font-size="12" fill="#94a3b8">CPython 3.14t Β· 12.4x CPU</text> | |
54 | - </g> | |
55 | - | |
56 | - <g> | |
57 | - <circle cx="70" cy="270" r="34" fill="#1e293b" stroke="#e6522c" stroke-width="2"/> | |
58 | - <text x="70" y="266" text-anchor="middle" font-size="20">π</text> | |
59 | - <text x="70" y="286" text-anchor="middle" font-size="11" fill="#e6522c" font-weight="700">HTTP/3</text> | |
60 | - <circle cx="70" cy="270" r="3" fill="#e6522c"> | |
61 | - <animate attributeName="opacity" values="1;0.2;1" dur="2.2s" repeatCount="indefinite"/> | |
62 | - </circle> | |
63 | - <text x="70" y="325" text-anchor="middle" font-size="12" fill="#94a3b8">QUIC, no one else ships it</text> | |
64 | - </g> | |
65 | - | |
66 | - <!-- ring B: middle ring --> | |
67 | - <g> | |
68 | - <circle cx="850" cy="130" r="34" fill="#1e293b" stroke="#22d3ee" stroke-width="2"/> | |
69 | - <text x="850" y="126" text-anchor="middle" font-size="20">π‘</text> | |
70 | - <text x="850" y="146" text-anchor="middle" font-size="11" fill="#22d3ee" font-weight="700">native SSE</text> | |
71 | - <circle cx="1130" cy="270" r="3" fill="#22d3ee"> | |
72 | - <animate attributeName="opacity" values="1;0.2;1" dur="1.9s" repeatCount="indefinite"/> | |
73 | - </circle> | |
74 | - <text x="850" y="185" text-anchor="middle" font-size="12" fill="#94a3b8">sse_native Β· 0 Python/event</text> | |
75 | - </g> | |
76 | - | |
77 | - <g> | |
78 | - <circle cx="350" cy="130" r="34" fill="#1e293b" stroke="#f5a524" stroke-width="2"/> | |
79 | - <text x="350" y="126" text-anchor="middle" font-size="20">π§©</text> | |
80 | - <text x="350" y="146" text-anchor="middle" font-size="11" fill="#f5a524" font-weight="700">native CRUD</text> | |
81 | - <circle cx="600" cy="70" r="3" fill="#f5a524"> | |
82 | - <animate attributeName="opacity" values="1;0.2;1" dur="2.1s" repeatCount="indefinite"/> | |
83 | - </circle> | |
84 | - <text x="350" y="185" text-anchor="middle" font-size="12" fill="#94a3b8">181k SELECT Β· 125x FastAPI</text> | |
85 | - </g> | |
86 | - | |
87 | - <g> | |
88 | - <circle cx="350" cy="410" r="34" fill="#1e293b" stroke="#8b5cf6" stroke-width="2"/> | |
89 | - <text x="350" y="406" text-anchor="middle" font-size="20">π</text> | |
90 | - <text x="350" y="426" text-anchor="middle" font-size="11" fill="#8b5cf6" font-weight="700">multi-worker</text> | |
91 | - <circle cx="600" cy="470" r="3" fill="#8b5cf6"> | |
92 | - <animate attributeName="opacity" values="1;0.2;1" dur="2.3s" repeatCount="indefinite"/> | |
93 | - </circle> | |
94 | - <text x="350" y="465" text-anchor="middle" font-size="12" fill="#94a3b8">--workers N Β· 1.88x @4</text> | |
95 | - </g> | |
96 | - | |
97 | - <g> | |
98 | - <circle cx="850" cy="410" r="34" fill="#1e293b" stroke="#e6522c" stroke-width="2"/> | |
99 | - <text x="850" y="406" text-anchor="middle" font-size="20">π</text> | |
100 | - <text x="850" y="426" text-anchor="middle" font-size="11" fill="#e6522c" font-weight="700">OpenAPI 3.1</text> | |
101 | - <circle cx="70" cy="270" r="3" fill="#e6522c"> | |
102 | - <animate attributeName="opacity" values="1;0.2;1" dur="2.5s" repeatCount="indefinite"/> | |
103 | - </circle> | |
104 | - <text x="850" y="465" text-anchor="middle" font-size="12" fill="#94a3b8">Pydantic v2 bridge</text> | |
105 | - </g> | |
106 | - | |
107 | - <!-- inner ring: security + observability --> | |
108 | - <g> | |
109 | - <circle cx="600" cy="190" r="26" fill="#111631" stroke="#22d3ee" stroke-width="1.5"/> | |
110 | - <text x="600" y="188" text-anchor="middle" font-size="15">π‘οΈ</text> | |
111 | - <text x="600" y="206" text-anchor="middle" font-size="9" fill="#22d3ee" font-weight="700">JWT Β· rate-limit Β· CORS</text> | |
112 | - </g> | |
113 | - <g> | |
114 | - <circle cx="740" cy="270" r="26" fill="#111631" stroke="#f5a524" stroke-width="1.5"/> | |
115 | - <text x="740" y="268" text-anchor="middle" font-size="15">π</text> | |
116 | - <text x="740" y="286" text-anchor="middle" font-size="9" fill="#f5a524" font-weight="700">OTel Β· Prometheus</text> | |
117 | - </g> | |
118 | - <g> | |
119 | - <circle cx="600" cy="350" r="26" fill="#111631" stroke="#8b5cf6" stroke-width="1.5"/> | |
120 | - <text x="600" y="348" text-anchor="middle" font-size="15">π</text> | |
121 | - <text x="600" y="366" text-anchor="middle" font-size="9" fill="#8b5cf6" font-weight="700">circuit breakers</text> | |
122 | - </g> | |
123 | - <g> | |
124 | - <circle cx="460" cy="270" r="26" fill="#111631" stroke="#e6522c" stroke-width="1.5"/> | |
125 | - <text x="460" y="268" text-anchor="middle" font-size="15">π§ͺ</text> | |
126 | - <text x="460" y="286" text-anchor="middle" font-size="9" fill="#e6522c" font-weight="700">mypy-clean stubs</text> | |
127 | - </g> | |
128 | - | |
129 | - <!-- connecting lines --> | |
130 | - <g stroke="#334155" stroke-width="1" opacity="0.6"> | |
131 | - <line x1="600" y1="104" x2="850" y2="130"/> | |
132 | - <line x1="600" y1="104" x2="350" y2="130"/> | |
133 | - <line x1="1130" y1="236" x2="850" y2="164"/> | |
134 | - <line x1="70" y1="236" x2="350" y2="164"/> | |
135 | - <line x1="600" y1="436" x2="850" y2="410"/> | |
136 | - <line x1="600" y1="436" x2="350" y2="410"/> | |
137 | - <line x1="1130" y1="304" x2="740" y2="296"/> | |
138 | - <line x1="70" y1="304" x2="460" y2="296"/> | |
139 | - </g> | |
140 | - </g> | |
141 | -</svg> | |
142 | 0 | |