Improve our_work and be able to set the synopsis
This commit is contained in:
parent
24590b299d
commit
272be07f0f
7 changed files with 82 additions and 52 deletions
12
pages/funding.md
Normal file
12
pages/funding.md
Normal 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.
|
|
@ -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" %}
|
||||
|
|
29
src/model.ml
29
src/model.ml
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
27
src/task.ml
27
src/task.ml
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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">
|
||||
|
|
Loading…
Reference in a new issue