Improve our_work and be able to set the synopsis

This commit is contained in:
Calascibetta Romain 2023-03-04 17:52:46 +01:00
parent 24590b299d
commit 272be07f0f
No known key found for this signature in database
GPG key ID: 8CC4DC3365A666B0
7 changed files with 82 additions and 52 deletions

12
pages/funding.md Normal file
View file

@ -0,0 +1,12 @@
## Funding
At Robur our focus is on the software we develop. We are passionate about our work and believe in the importance of creating and maintaining secure digital infrastructure.
We get our funding through three avenues: grants for particular open-source projects, contracts for specific work including development and auditing, and public donations that help allow us to continue the work that isn't otherwise funded.
We spend most of our funding on salaries, ensuring Robur keeps developing the software we think is important. We do not spend money on fancy parties or first class business trips. Our general breakdown of spending per year is:
- 83% on salaries
- 7% on necessary travel
- 10% on inecitable adminitrative costs
If you are considering donating to us, hiring us, or giving us a grant you can be assured your money will be well spent on the actual end result of delivering the robust and secure digital infrastructure we strive for.

View file

@ -1,6 +1,8 @@
---
title: Our Work
description: The Robur Cooperative
synopsis: |
We are a nonprofit open source software cooperative whose mission is to develop robust and secure digital infrastructure. We strive to enable more people to reliably run their own infrastructure by producing correct, surprise-free software to be deployed in real environments. Our software aims to meet the needs of anyone working in an environment where security and dependability is vital.
---
{% include "templates/our_work.html" %}

View file

@ -60,24 +60,28 @@ end
module Our_work = struct
type t =
{ title : string option
; description : string option
{ title : string
; description : string
; synopsis : string
; technologies : string
; services : string }
let make ~technologies ~services page =
{ title= Metadata.Page.title page
; description = Metadata.Page.description page
let make ~technologies ~services (title, description, synopsis )=
{ title
; description
; synopsis
; technologies
; services }
let inject (type a) (module D : Key_value.DESCRIBABLE with type t = a) t =
D.[ "active", object_ $ [ "page", string "our_work" ]
; "page", object_ $ [ "title", string (Option.value ~default:"" t.title)
; "description", string (Option.value ~default:"" t.description) ]
; "page", object_ $ [ "title", string t.title
; "description", string t.description ]
; "synopsis", string t.synopsis
; "title", string t.title
; "description", string t.description
; "technologies", object_ $ [ "body", string t.technologies ]
; "services", object_ $ [ "body", string t.services ] ]
@ (Metadata.Page.inject (module D) (Metadata.Page.make t.title t.description))
end
module Person = struct
@ -115,15 +119,17 @@ module About_us = struct
; current_members : (Person.t * string) list
; former_members : (Person.t * string) list
; retreats : string
; network : string }
; network : string
; funding : string }
let make ~retreats ~network ~current_members ~former_members page =
let make ~retreats ~network ~funding ~current_members ~former_members page =
{ title= Metadata.Page.title page
; description= Metadata.Page.description page
; current_members
; former_members
; retreats
; network }
; network
; funding }
let inject (type a) (module D : Key_value.DESCRIBABLE with type t = a) t =
D.[ "active", object_ $ [ "page", string "about_us" ]
@ -131,6 +137,7 @@ module About_us = struct
; "description", string (Option.value ~default:"" t.description) ]
; "retreats", object_ $ [ "body", string t.retreats ]
; "network", object_ $ [ "body", string t.network ]
; "funding", object_ $ [ "body", string t.funding ]
; "team", object_ $ [ "body", string "FIXME"
; "current_members", list (List.map (fun (p, desc) ->
object_ (("description", string desc) :: Person.inject (module D) p)) t.current_members)

View file

@ -19,7 +19,7 @@ module Our_work : sig
type t
val make : technologies:string -> services:string ->
Metadata.Page.t -> t
(string * string * string) -> t
include Metadata.INJECTABLE with type t := t
end
@ -38,6 +38,7 @@ module About_us : sig
val make :
retreats:string
-> network:string
-> funding:string
-> current_members:(Person.t * string) list
-> former_members:(Person.t * string) list
-> Metadata.Page.t -> t

View file

@ -51,6 +51,23 @@ let generate_index target =
Model.Index.make ~cooperative ~what_we_do page, content in
with_layout (module Model.Index) read_model (index_html target)
module Page' = struct
type t =
{ title : string
; description : string
; synopsis : string }
let from_string (module V : Metadata.VALIDABLE) = function
| None -> Validate.error $ Error.Required_metadata [ "Page'" ]
| Some str ->
let open Validate.Monad in
V.from_string str >>= V.object_and @@ fun assoc ->
let* title = V.(required_assoc string) "title" assoc in
let* description = V.(required_assoc string) "description" assoc in
let* synopsis = V.(required_assoc string) "synopsis" assoc in
return { title; description; synopsis; }
end
let generate_about_us target =
let open Build in
let read_members dir =
@ -67,9 +84,10 @@ let generate_about_us target =
&&& former_members
&&& (Build.read_file "pages/retreats.md" >>> Markup.to_html)
&&& (Build.read_file "pages/network.md" >>> Markup.to_html)
&&& (Build.read_file "pages/funding.md" >>> Markup.to_html)
&&& (Metaformat.read_file_with_metadata (module Metadata.Page) "pages/about_us.md")
>>^ fun ((((current_members, former_members), retreats), network), (page, content)) ->
Model.About_us.make ~retreats ~network ~current_members ~former_members page, content in
>>^ fun (((((current_members, former_members), retreats), network), funding), (page, content)) ->
Model.About_us.make ~retreats ~network ~funding ~current_members ~former_members page, content in
with_layout (module Model.About_us) read_model (about_us_html target)
let generate_our_work target =
@ -77,7 +95,8 @@ let generate_our_work target =
let read_model =
(Build.read_file "pages/technologies.md" >>> Markup.to_html)
&&& (Build.read_file "pages/services.md" >>> Markup.to_html)
&&& (Metaformat.read_file_with_metadata (module Metadata.Page) "pages/our_work.md")
&&& (Metaformat.read_file_with_metadata (module Page') "pages/our_work.md")
>>^ fun ((technologies, services), (page, content)) ->
Model.Our_work.make ~technologies ~services page, content in
Model.Our_work.make ~technologies ~services
Page'.(page.title, page.description, page.synopsis), content in
with_layout (module Model.Our_work) read_model (our_work_html target)

View file

@ -22,39 +22,39 @@
<div class="container-fluid p0">
<div class="container">
<div class="col-md-12">
<h2>The current team</h2>
<h2>The current team</h2>
</div>
<div class="tekst-element">
{% for row in batch(2, team.current_members, fill_with="member") %}
<div class="col-md-12 p0">
{% for member in row %}
{% for member in row %}
<div class="member-description col-md-6">
<p class="underoverskrift">{{ member.name }}</p>
<p class="underoverskrift">{{ member.name }}</p>
{%- autoescape false -%}
{{ member.description }}
{% endautoescape -%}
</div>
{% endfor %}
{% endfor %}
</div>
{% endfor %}
{% endfor %}
</div>
<div class="col-md-12">
<h2>Former members</h2>
<h2>Former members</h2>
</div>
<div class="tekst-element">
<div class="col-md-12 p0">
{% for row in batch(2, team.former_members, fill_with="member") %}
{% for row in batch(2, team.former_members, fill_with="member") %}
<div class="col-md-12 p0">
{% for member in row %}
{% for member in row %}
<div class="col-md-6">
<p class="underoverskrift">{{ member.name }}</p>
{%- autoescape false -%}
{{ member.description }}
{% endautoescape -%}
</div>
{% endfor %}
{% endfor %}
</div>
{% endfor %}
{% endfor %}
</div>
</div>
</div>
@ -66,18 +66,18 @@
<div class="container-fluid">
<div class="container flex">
<div class="col-md-6 column-1">
{%- autoescape false -%}
{{ retreats.body }}
{% endautoescape -%}
{%- autoescape false -%}
{{ retreats.body }}
{% endautoescape -%}
<div class="button-bottom">
<button class="mirage-btn"><a href="static.php">Go to MirageOS</a></button>
</div>
</div>
<div class="col-md-6 column-2">
{%- autoescape false -%}
{{ network.body }}
{% endautoescape -%}
{%- autoescape false -%}
{{ network.body }}
{% endautoescape -%}
<div class="button-bottom">
<button class="collab-btn"><a href="network.php">See all collaborations and grant Funders</a></button>
@ -90,20 +90,9 @@
<div class="section-3">
<div class="container-fluid">
<div class="container">
<div class="col-md-12">
<h2>Funding</h2>
<p class="manchet">At Robur our focus is on the software we develop. We are passionate about our work and believe in the importance of creating and maintaining secure digital infrastructure.</p>
</div>
<div class="col-md-12 columns-2">
<p>We get our funding through three avenues: grants for particular open-source projects, contracts for specific work including development and auditing, and public donations that help allow us to continue the work that isn't otherwise funded.</p>
<p>We spend most of our funding on salaries, ensuring Robur keeps developing the software we think is important. We do not spend money on fancy parties or first class business trips. Our general breakdown of spending per year is:</p>
<ul>
<li>83% on salaries</li>
<li>7% on necessary travel</li>
<li>10% on inecitable administrative costs</li>
</ul>
<p>If you are considering donating to us, hiring us, or giving us a grant you can be assured your money will be well spent on the actual end result of delivering the robust and secure digital infrastructure we strive for.</p>
</div>
{%- autoescape false -%}
{{ funding.body }}
{% endautoescape -%}
<div class="col-md-12 button-pair">
<button class="contact-btn"><a href="#contact">Contact us</a></button>
<button class="donate-btn"><a href="donate.php">Donate now</a></button>

View file

@ -5,7 +5,7 @@
<div class="col-md-12">
<h2>Our approach</h2>
<span class="manchet">
<p>We are a nonprofit open source software cooperative whose mission is to develop robust and secure digital infrastructure. We strive to enable more people to reliably run their own infrastructure by producing correct, surprise-free software to be deployed in real environments. Our software aims to meet the needs of anyone working in an environment where security and dependability is vital.</p>
<p>{{ synopsis }}</p>
</span>
</div>
@ -25,9 +25,9 @@
<div class="container-fluid p0">
<div class="container">
<div class="col-md-12">
{%- autoescape false -%}
{{ technologies.body }}
{% endautoescape -%}
{%- autoescape false -%}
{{ technologies.body }}
{% endautoescape -%}
</div>
</div>
</div>
@ -57,8 +57,8 @@
<div class="container-fluid dark">
<div class="container">
{%- autoescape false -%}
{{ service.body }}
{% endautoescape -%}
{{ service.body }}
{% endautoescape -%}
<div class="col-md-12 p0 img-row">
<div class="col-md-4 p0">
<object data="images/our_work.svg" type="image/svg+xml">