Skip to content

Commit d4b609d

Browse files
authored
Merge pull request #82 from control-toolbox/applications
Add applications page with styled cards
2 parents 5dbab28 + 2773edb commit d4b609d

11 files changed

Lines changed: 184 additions & 20 deletions

File tree

.github/workflows/update_contributors.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
name: Update Contributors Page
22

33
on:
4-
schedule: # execute every 24 hours
5-
- cron: "* */24 * * *"
4+
schedule: # execute every day at midnight
5+
- cron: "0 0 * * *"
66
workflow_dispatch: # Allow manual trigger
77

88
permissions:

.markdownlint.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"MD033": false,
3+
"MD013": false,
4+
"MD034": false,
5+
"MD045": false
6+
}

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@ To solve your first optimal control problem using [OptimalControl.jl](https://gi
2121
<div class="logo"><a href="https://www.inria.fr"><img id="partner" align="left" src="assets/img/inria.svg" /></a></div>
2222
<div class="logo"><a href="https://www.univ-cotedazur.fr"><img id="partner" align="left" src="assets/img/Logo-univ-nice-cote-dazur.svg" /></a></div>
2323
<div class="logo"><a href="https://anr.fr"><img id="funding" align="left" src="assets/img/anr-logo.jpg" /></a></div>
24-
<div class="logo"><a href="https://pde-ai.math.cnrs.fr"><img id="funding" align="left" src="assets/img/fr2030ia.png" /></a></div>
24+
<div class="logo"><a href="https://pde-ai.math.cnrs.fr"><img id="funding" align="left" src="assets/img/fr2030ia.png" /></a></div>
2525
</div>

_includes/app-card.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<a class="app-card" href="{{ include.url }}" style="--app-color: {{ include.color }};">
2+
<div class="app-header">
3+
<div class="app-avatar-text">{{ include.abbrev }}</div>
4+
<span class="app-title">{{ include.title }}</span>
5+
</div>
6+
<div class="app-body">
7+
<p class="app-summary">{{ include.summary }}</p>
8+
</div>
9+
</a>

_layouts/default.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<link class="docs-theme-link" data-theme-name="documenter-light" data-theme-primary="" href="https://control-toolbox.org/OptimalControl.jl/stable/assets/themes/documenter-light.css" rel="stylesheet" type="text/css"/>
1919
<link href="/assets/css/multidoc.css" rel="stylesheet" type="text/css"/>
2020
<link href="/assets/css/flexsearch.css" rel="stylesheet" type="text/css"/>
21+
{% if page.custom_css %}{% assign css_list = page.custom_css %}{% if css_list.first %}{% for css in css_list %}<link rel="stylesheet" href="{{ css }}">{% endfor %}{% else %}<link rel="stylesheet" href="{{ css_list }}">{% endif %}{% endif %}
2122
<script charset="utf-8" src="/assets/js/documentation.js" type="text/javascript"></script>
2223
<script data-main="/assets/js/documenter.js" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"></script>
2324
</head>
@@ -42,4 +43,4 @@ <h1 id="ct-title"><img id="ct-logo-title" src="/assets/img/ct-logo.svg">control-
4243

4344
</body>
4445

45-
</html>
46+
</html>

about/contributors.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22
layout: default
33
title: Contributors
44
permalink: /contributors/
5+
custom_css: /assets/css/contributors.css
56
---
67

7-
<link rel="stylesheet" href="/assets/css/contributors.css">
8-
98
<div class="contributors-page">
109

1110
<div class="contributors-header">

applications/img/.gitkeep

Whitespace-only changes.

applications/index.md

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
---
2+
layout: default
3+
title: Applications
4+
permalink: /applications/
5+
custom_css:
6+
- /assets/css/contributors.css
7+
- /assets/css/applications.css
8+
---
9+
10+
<div class="contributors-page">
11+
12+
<div class="contributors-header">
13+
<h1>Applications</h1>
14+
<p class="subtitle">A collection of optimal control applications built with the control-toolbox ecosystem.</p>
15+
</div>
16+
17+
<div class="contributors-section">
18+
<div class="app-grid">
19+
20+
{% include app-card.html
21+
url="https://control-toolbox.org/CalculusOfVariations.jl"
22+
color="#CB3C33"
23+
abbrev="CoV"
24+
title="Calculus of variations"
25+
summary="Classical variational problems reformulated as optimal control problems and solved via direct and indirect numerical methods."
26+
%}
27+
28+
{% include app-card.html
29+
url="https://agustinyabo.github.io/DiauxicGrowth.jl"
30+
color="#389826"
31+
abbrev="DBG"
32+
title="Diauxic bacterial growth"
33+
summary="Optimal resource allocation for bacterial growth on multiple substrates, maximizing final cell population via optimal control of metabolic fluxes."
34+
%}
35+
36+
{% include app-card.html
37+
url="https://agustinyabo.github.io/PWLdynamics.jl"
38+
color="#9558B2"
39+
abbrev="GRN"
40+
title="PWL models of gene regulatory networks"
41+
summary="State transitions in piecewise linear models of gene regulatory networks, with a nonsmooth L¹ cost and regularization strategies (Hill and exponential)."
42+
%}
43+
44+
{% include app-card.html
45+
url="https://control-toolbox.org/GeometricPreconditioner.jl"
46+
color="#CB3C33"
47+
abbrev="GPrec"
48+
font_size="19"
49+
title="Geometric preconditioner"
50+
summary="Geometric preconditioning of shooting methods to accelerate convergence in indirect optimal control, exploiting the structure of the Hamiltonian flow."
51+
%}
52+
53+
{% include app-card.html
54+
url="https://control-toolbox.org/LossControl.jl"
55+
color="#389826"
56+
abbrev="LCtrl"
57+
font_size="19"
58+
title="Loss control regions in optimal control problems"
59+
summary="Optimal control problems with loss control regions where the control is frozen, solved by combining direct regularization and indirect shooting methods."
60+
%}
61+
62+
{% include app-card.html
63+
url="https://control-toolbox.org/MagneticResonanceImaging.jl"
64+
color="#9558B2"
65+
abbrev="MRI"
66+
title="Optimal control in Magnetic Resonance Imaging"
67+
summary="Time-minimal control of nuclear spin ensembles via RF pulses, with applications to contrast optimization in MRI using geometric optimal control."
68+
%}
69+
70+
{% include app-card.html
71+
url="https://control-toolbox.org/Kepler.jl"
72+
color="#CB3C33"
73+
abbrev="Kepler"
74+
font_size="19"
75+
title="Minimum time orbit transfer"
76+
summary="Minimum-time orbit transfer of a spacecraft under Kepler dynamics with thrust constraints, solved by direct and indirect methods (CNES/TAS/Inria/CNRS)."
77+
%}
78+
79+
{% include app-card.html
80+
url="https://anasxbouali.github.io/SIRcontrol.jl"
81+
color="#389826"
82+
abbrev="SIR"
83+
title="On the problem of minimizing the epidemic final size for SIR model via social distancing"
84+
summary="Minimizing epidemic final size in the SIR model via L¹-constrained social distancing interventions, with optimal control over a single or two time intervals."
85+
%}
86+
87+
</div>
88+
</div>
89+
90+
</div>

assets/css/applications.css

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/* Application Cards */
2+
.app-grid {
3+
display: flex;
4+
flex-direction: column;
5+
gap: 1.5rem;
6+
margin: 2rem 0;
7+
}
8+
9+
.app-card {
10+
display: flex;
11+
flex-direction: column;
12+
background: var(--color-canvas-default, #ffffff);
13+
border: 1px solid var(--color-border-default, #e1e4e8);
14+
border-radius: 12px;
15+
overflow: hidden;
16+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
17+
transition: transform 0.2s ease, box-shadow 0.2s ease;
18+
text-decoration: none;
19+
color: inherit;
20+
}
21+
22+
.app-card:hover {
23+
transform: translateY(-4px);
24+
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
25+
}
26+
27+
.app-header {
28+
padding: 1rem 1.75rem;
29+
display: flex;
30+
align-items: center;
31+
gap: 1rem;
32+
background: var(--color-canvas-default, #ffffff);
33+
border-bottom: 1px solid var(--color-border-default, #e1e4e8);
34+
}
35+
36+
.app-avatar-text {
37+
font-family: 'JuliaMono', monospace, 'Courier New', monospace;
38+
font-size: 1.5rem;
39+
font-weight: 700;
40+
background: var(--app-color, #CB3C33);
41+
color: white;
42+
padding: 0.5rem 0.75rem;
43+
border-radius: 8px;
44+
width: 125px;
45+
text-align: center;
46+
flex-shrink: 0;
47+
}
48+
49+
.app-title {
50+
font-size: 1.25rem;
51+
font-weight: 600;
52+
color: var(--color-text-primary, #24292e);
53+
text-decoration: none;
54+
flex: 1;
55+
}
56+
57+
.app-card:hover .app-title {
58+
text-decoration: underline;
59+
}
60+
61+
.app-body {
62+
padding: 1rem 1.75rem 1rem;
63+
background: white;
64+
}
65+
66+
.app-summary {
67+
font-size: 0.95rem;
68+
color: var(--color-text-secondary, #585c60);
69+
line-height: 1.6;
70+
margin: 0 !important;
71+
}

assets/css/contributors.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
.contributors-page {
44
max-width: 1200px;
55
margin: 0 auto;
6-
padding: 2rem 1rem;
6+
padding: 0rem 0rem;
77
}
88

99
.contributors-header {

0 commit comments

Comments
 (0)