File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 6161 </div >
6262 <div class =" traits" >
6363 <div class =" trait" >
64- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" " loading =" lazy" >
64+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" Doctrine, not Active Record " loading =" lazy" >
6565 <p >Doctrine, not Active Record</p >
6666 </div >
6767
6868 <div class =" trait" >
69- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" " loading =" lazy" >
69+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" Explicit wiring, no magic " loading =" lazy" >
7070 <p >Explicit wiring, no magic</p >
7171 </div >
7272
7373 <div class =" trait" >
74- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" Lightning-fast performance " loading =" lazy" >
74+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" One domain, three deployables " loading =" lazy" >
7575 <p >One domain, three deployables</p >
7676 </div >
7777
7878 <div class =" trait" >
79- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" Easier maintenance and onboarding " loading =" lazy" >
79+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" Dependencies that move slowly " loading =" lazy" >
8080 <p >Dependencies that move slowly</p >
8181 </div >
8282 </div >
Original file line number Diff line number Diff line change 144144 </div >
145145 <div class =" traits" >
146146 <div class =" trait" >
147- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" " loading =" lazy" >
147+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" Every change reviewed by someone else " loading =" lazy" >
148148 <p >Every change reviewed by someone else</p >
149149 </div >
150150
151151 <div class =" trait" >
152- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" " loading =" lazy" >
152+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" One structure across every application " loading =" lazy" >
153153 <p >One structure across every application</p >
154154 </div >
155155
156156 <div class =" trait" >
157- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" " loading =" lazy" >
157+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" Learning time counted as real work " loading =" lazy" >
158158 <p >Learning time counted as real work</p >
159159 </div >
160160
161161 <div class =" trait" >
162- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" " loading =" lazy" >
162+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" Decisions written down, not remembered " loading =" lazy" >
163163 <p >Decisions written down, not remembered</p >
164164 </div >
165165 </div >
Original file line number Diff line number Diff line change 148148 </div >
149149 <div class =" traits" >
150150 <div class =" trait" >
151- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" " loading =" lazy" >
151+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" Table-based record management " loading =" lazy" >
152152 <p >Table-based record management</p >
153153 </div >
154154
155155 <div class =" trait" >
156- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" " loading =" lazy" >
156+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" Every shipped form validated and CSRF-guarded " loading =" lazy" >
157157 <p >Every shipped form validated and CSRF-guarded</p >
158158 </div >
159159
160160 <div class =" trait" >
161- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" " loading =" lazy" >
161+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" Shares the Core module with API " loading =" lazy" >
162162 <p >Shares the Core module with API</p >
163163 </div >
164164
165165 <div class =" trait" >
166- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" " loading =" lazy" >
166+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" Twig templates, npm asset pipeline " loading =" lazy" >
167167 <p >Twig templates, npm asset pipeline</p >
168168 </div >
169169 </div >
Original file line number Diff line number Diff line change 195195 </div >
196196 <div class =" traits" >
197197 <div class =" trait" >
198- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" " loading =" lazy" >
198+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" Doctrine ORM, not Active Record " loading =" lazy" >
199199 <p >Doctrine ORM, not Active Record</p >
200200 </div >
201201
202202 <div class =" trait" >
203- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" " loading =" lazy" >
203+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" Explicit wiring, no runtime magic " loading =" lazy" >
204204 <p >Explicit wiring, no runtime magic</p >
205205 </div >
206206
207207 <div class =" trait" >
208- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" " loading =" lazy" >
208+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" Auth, docs and errors on install " loading =" lazy" >
209209 <p >Auth, docs and errors on install</p >
210210 </div >
211211
212212 <div class =" trait" >
213- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" " loading =" lazy" >
213+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" MIT licensed, actively maintained " loading =" lazy" >
214214 <p >MIT licensed, actively maintained</p >
215215 </div >
216216 </div >
Original file line number Diff line number Diff line change 178178 </div >
179179 <div class =" traits" >
180180 <div class =" trait" >
181- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" " loading =" lazy" >
181+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" Gradual learning curve " loading =" lazy" >
182182 <p >Gradual learning curve</p >
183183 </div >
184184
185185 <div class =" trait" >
186- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" " loading =" lazy" >
186+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" Fine-tuned security " loading =" lazy" >
187187 <p >Fine-tuned security</p >
188188 </div >
189189
190190 <div class =" trait" >
191- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" " loading =" lazy" >
191+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" KISS, YAGNI, DRY " loading =" lazy" >
192192 <p >KISS, YAGNI, DRY</p >
193193 </div >
194194
195195 <div class =" trait" >
196- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" " loading =" lazy" >
196+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" Long-term support " loading =" lazy" >
197197 <p >Long-term support</p >
198198 </div >
199199 </div >
Original file line number Diff line number Diff line change 118118 </div >
119119 <div class =" traits" >
120120 <div class =" trait" >
121- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" " loading =" lazy" >
121+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" Detects the variant before it answers " loading =" lazy" >
122122 <p >Detects the variant before it answers</p >
123123 </div >
124124
125125 <div class =" trait" >
126- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" " loading =" lazy" >
126+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" Secrets never enter the context window " loading =" lazy" >
127127 <p >Secrets never enter the context window</p >
128128 </div >
129129
130130 <div class =" trait" >
131- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" " loading =" lazy" >
131+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" Guards catch compound commands globs miss " loading =" lazy" >
132132 <p >Guards catch compound commands globs miss</p >
133133 </div >
134134
135135 <div class =" trait" >
136- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" " loading =" lazy" >
136+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" Copy it in - nothing to build or install " loading =" lazy" >
137137 <p >Copy it in - nothing to build or install</p >
138138 </div >
139139 </div >
Original file line number Diff line number Diff line change 166166 </div >
167167 <div class =" traits" >
168168 <div class =" trait" >
169- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" " loading =" lazy" >
169+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" User accounts, from register to unregister " loading =" lazy" >
170170 <p >User accounts, from register to unregister</p >
171171 </div >
172172
173173 <div class =" trait" >
174- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" " loading =" lazy" >
174+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" Action controllers, not request handlers " loading =" lazy" >
175175 <p >Action controllers, not request handlers</p >
176176 </div >
177177
178178 <div class =" trait" >
179- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" " loading =" lazy" >
179+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" CSRF and reCAPTCHA on public forms " loading =" lazy" >
180180 <p >CSRF and reCAPTCHA on public forms</p >
181181 </div >
182182
183183 <div class =" trait" >
184- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" " loading =" lazy" >
184+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" GDPR anonymization out of the box " loading =" lazy" >
185185 <p >GDPR anonymization out of the box</p >
186186 </div >
187187 </div >
Original file line number Diff line number Diff line change 137137 </div >
138138 <div class =" traits" >
139139 <div class =" trait" >
140- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" " loading =" lazy" >
140+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" Six direct dependencies " loading =" lazy" >
141141 <p >Six direct dependencies</p >
142142 </div >
143143
144144 <div class =" trait" >
145- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" " loading =" lazy" >
145+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" No database layer to configure " loading =" lazy" >
146146 <p >No database layer to configure</p >
147147 </div >
148148
149149 <div class =" trait" >
150- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" " loading =" lazy" >
150+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" A new page is one config line and one template " loading =" lazy" >
151151 <p >A new page is one config line and one template</p >
152152 </div >
153153
154154 <div class =" trait" >
155- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" " loading =" lazy" >
155+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" Twig layout, Vite asset pipeline " loading =" lazy" >
156156 <p >Twig layout, Vite asset pipeline</p >
157157 </div >
158158 </div >
Original file line number Diff line number Diff line change 156156 </div >
157157 <div class =" traits" >
158158 <div class =" trait" >
159- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" " loading =" lazy" >
159+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" High request rate without overloading " loading =" lazy" >
160160 <p >High request rate without overloading</p >
161161 </div >
162162
163163 <div class =" trait" >
164- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" " loading =" lazy" >
164+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" FIFO - the oldest message runs first " loading =" lazy" >
165165 <p >FIFO - the oldest message runs first</p >
166166 </div >
167167
168168 <div class =" trait" >
169- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" " loading =" lazy" >
169+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" Retries with exponential backoff " loading =" lazy" >
170170 <p >Retries with exponential backoff</p >
171171 </div >
172172
173173 <div class =" trait" >
174- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" " loading =" lazy" >
174+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" Failures parked, never blocking the queue " loading =" lazy" >
175175 <p >Failures parked, never blocking the queue</p >
176176 </div >
177177 </div >
Original file line number Diff line number Diff line change 137137 </div >
138138 <div class =" traits" >
139139 <div class =" trait" >
140- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" " loading =" lazy" >
140+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/success-50.svg' ) }}" alt =" RHEL-compatible, matches production " loading =" lazy" >
141141 <p >RHEL-compatible, matches production</p >
142142 </div >
143143
144144 <div class =" trait" >
145- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" " loading =" lazy" >
145+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/speed-radar-50.svg' ) }}" alt =" One playbook, the whole stack " loading =" lazy" >
146146 <p >One playbook, the whole stack</p >
147147 </div >
148148
149149 <div class =" trait" >
150- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" " loading =" lazy" >
150+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/traffic-sign-50.svg' ) }}" alt =" Virtualhosts without touching hosts file " loading =" lazy" >
151151 <p >Virtualhosts without touching hosts file</p >
152152 </div >
153153
154154 <div class =" trait" >
155- <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" " loading =" lazy" >
155+ <img class =" icon icon-lg" decoding =" async" src =" {{ asset(' images/app/content/maintenance.svg' ) }}" alt =" Aliases for switching PHP & Node versions " loading =" lazy" >
156156 <p >Aliases for switching PHP & Node versions</p >
157157 </div >
158158 </div >
You can’t perform that action at this time.
0 commit comments