Merge branch 'dev' car site déployé et en production => Version 1.0

This commit is contained in:
Florent Le Saout 2020-11-01 13:33:44 +01:00
commit d91f904bda
153 changed files with 14091 additions and 0 deletions
.eleventy.js.gitignore.prettierrc.stylelintrc.jsonLICENSE.txtREADME.mddeploy.jspackage-lock.jsonpackage.json
src
.htaccess404.md
_data
_includes
customers
filters
fonts
form
images
index.md
js/components
members
pages

114
.eleventy.js Normal file
View File

@ -0,0 +1,114 @@
const rssPlugin = require('@11ty/eleventy-plugin-rss');
const syntaxHighlight = require('@11ty/eleventy-plugin-syntaxhighlight');
const fs = require('fs');
// Import filters
const dateFilter = require('./src/filters/date-filter.js');
const markdownFilter = require('./src/filters/markdown-filter.js');
const w3DateFilter = require('./src/filters/w3-date-filter.js');
// Import transforms
const htmlMinTransform = require('./src/transforms/html-min-transform.js');
const parseTransform = require('./src/transforms/parse-transform.js');
// Import data files
const site = require('./src/_data/site.json');
module.exports = function(config) {
// Filters
config.addFilter('dateFilter', dateFilter);
config.addFilter('markdownFilter', markdownFilter);
config.addFilter('w3DateFilter', w3DateFilter);
// Layout aliases
config.addLayoutAlias('home', 'layouts/home.njk');
// Transforms
config.addTransform('htmlmin', htmlMinTransform);
config.addTransform('parse', parseTransform);
// Passthrough copy
config.addPassthroughCopy('src/fonts');
config.addPassthroughCopy('src/images');
config.addPassthroughCopy('src/js');
config.addPassthroughCopy('src/admin/config.yml');
config.addPassthroughCopy('src/admin/previews.js');
config.addPassthroughCopy('node_modules/nunjucks/browser/nunjucks-slim.js');
config.addPassthroughCopy('src/robots.txt');
config.addPassthroughCopy('src/.htaccess');
config.addPassthroughCopy('src/form');
const now = new Date();
// Custom collections
const livePosts = post => post.date <= now && !post.data.draft;
const newsPosts = post => post.data.type === 'news';
const eventPosts = post => post.data.type === 'event';
config.addCollection('posts', collection => {
return [
...collection.getFilteredByGlob('./src/posts/*.md')
].reverse();
});
config.addCollection('news', collection => {
return [
...collection.getFilteredByGlob('./src/posts/*.md').filter(newsPosts)
].reverse();
});
config.addCollection('events', collection => {
return [
...collection.getFilteredByGlob('./src/posts/*.md').filter(eventPosts)
].reverse();
});
config.addCollection('newsFeed', collection => {
return [...collection.getFilteredByGlob('./src/posts/*.md').filter(livePosts)]
.reverse()
.slice(0, site.maxNewsPerPage);
});
config.addCollection('members', collection => {
return [...collection.getFilteredByGlob("./src/members/*.md")];
});
config.addCollection('profiles', collection => {
return [...collection.getFilteredByGlob("./src/members/*.md")]
.reverse()
.slice(0, site.maxProfilePreview)
;
});
config.addCollection('customers', collection => {
return [...collection.getFilteredByGlob("./src/customers/*.md")]
.reverse()
.slice(0, site.maxPartnerPerPage);
});
config.addCollection('partners', collection => {
return [...collection.getFilteredByGlob("./src/partners/*.md")]
.reverse()
.slice(0, site.maxPartnerPerPage);
});
// Plugins
config.addPlugin(rssPlugin);
config.addPlugin(syntaxHighlight);
// 404
config.setBrowserSyncConfig({
callbacks: {
ready: function(err, browserSync) {
const content_404 = fs.readFileSync('dist/404.html');
browserSync.addMiddleware('*', (req, res) => {
// Provides the 404 content without redirect.
res.write(content_404);
res.end();
});
}
}
});
return {
dir: {
input: 'src',
output: 'dist'
},
passthroughFileCopy: true,
};
};

21
.gitignore vendored Normal file
View File

@ -0,0 +1,21 @@
*.log
npm-debug.*
*.scssc
*.log
*.swp
.DS_Store
.vscode
*.code-workspace
.sass-cache
node_modules
dist/*
deploy-prod.js
deploy-preprod.js
# Specifics
# Hide design tokens
src/scss/_tokens.scss
# Hide compiled CSS
src/_includes/assets/*

6
.prettierrc Normal file
View File

@ -0,0 +1,6 @@
{
"printWidth": 90,
"tabWidth": 2,
"singleQuote": true,
"bracketSpacing": false
}

19
.stylelintrc.json Normal file
View File

@ -0,0 +1,19 @@
{
"extends": "stylelint-config-sass-guidelines",
"rules": {
"order/properties-alphabetical-order": null,
"property-no-vendor-prefix": null,
"selector-class-pattern": [
"^[a-z0-9\\-_]+$",
{
"message":
"Selector should be written in lowercase (selector-class-pattern)"
}
],
"max-nesting-depth": 6,
"number-leading-zero": "never",
"selector-no-qualifying-type": null,
"selector-max-compound-selectors": 6,
"selector-max-id": 1
}
}

21
LICENSE.txt Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2019 andy-bell.design and other contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

129
README.md Normal file
View File

@ -0,0 +1,129 @@
# Astrolabe website
## Getting started
Requirements :
- Git
- Node.js (minimum version v12.15.0)
### Install
1. Clone or fork this repo: `git clone https://git.ouvaton.coop/astrolabe/SiteWebAstrolabe`
2. `cd` into the project directory and run `npm install`
3. Once all the dependencies are installed run `npm start`
4. Open your browser at `http://localhost:8080` and away you go!
### Deploy
1. Copy paste deploy.js file in two new files `deploy-preprod.js`and `deploy-prod.js`
2. Make sure to fill in correct platform information in the two files
3. Run `npm run deploy-preprod`to deploy to the pre-production platform
4. Run `npm run deploy-prod`to deploy to the production platform
## Terminal commands
### Serve the site locally
```bash
npm start
```
### Build a production version of the site
```bash
npm run prod
```
### Lint Sass
```bash
npm run sass:lint
```
### Compile Sass
```bash
npm run sass:process
```
## Content editing
All operations are based on the `src` folder as a root.
### Add a new post
A post is composed of a markdown file and optionally images.
There is two kinds of posts :
- News post
- Event post
#### Add a 'news' post
In the `posts`folder, create a new mardown file `example.md`(or copy paste one of the existing files)
Fill in the meta information :
1. `title:` the post heading
2. `date:` the publication date, if further than current date the post won't appear in the posts list until current date is met.
3. `type:` 'news' for news post
Then add the post content in plain mardown language. You can add images to your post, make sure to place them in the `images`folder.
#### Add an 'event' post
In the `posts`folder, create a new mardown file `example-date.md`(or copy paste one of the existing files). Use date in post file name to identify them easily (not mandatory).
Fill in the meta information :
1. `title:` the post heading
2. `date:` the publication date, if further than current date the post won't appear in the posts list until current date is met.
3. `time:` the time of the event.
4. `type:` 'event' for event post
Then add the post content in plain mardown language. You can add images to your post, make sure to place them in the `images`folder.
### Add a new member
In the `members`folder, create a new mardown file `name-surname.md`(or copy paste one of the existing files)
Fill in the meta information :
1. `name:` the full name of the member
2. `position:` job title
3. `positionInternal:` internal role if any
4. `date:` date of arrival in the coop
5. `profile:` picture of the member, make sure to place it in the `images/profiles/` folder
6. `personalSite:` website url if any
7. `socialMastodon:` profile url if any
8. `socialTwitter:` profile url if any
9. `socialLinkedin:` profile url if any
10. `url:` personal page url in the website, eg `/members/name-surname`
Then add the member bio or any content
### Customers & Partners
The two are listed on the home page in different section. There is maximum of four per section, in reversed order regarding the date of addition.
#### Add a new customer
In the `customers`folder, create a new mardown file `customer-name.md`(or copy paste one of the existing files)
Fill in the meta information :
1. `name:` the brand name of the customer
2. `thumbnail:` the customer brand logo, make sure to place it in the `images/customers/`folder
3. `url:` the customer website
#### Add a new partner
In the `partners`folder, create a new mardown file `partner-name.md`(or copy paste one of the existing files)
Fill in the meta information :
1. `name:` the brand name of the partner
2. `thumbnail:` the partner brand logo, make sure to place it in the `images/partner/`folder
3. `url:` the partner website

29
deploy.js Normal file
View File

@ -0,0 +1,29 @@
var FtpDeploy = require("ftp-deploy");
var ftpDeploy = new FtpDeploy();
var config = {
user: "user",
// Password optional, prompted if none given
password: "password",
host: "ftp.someserver.com",
port: 21,
localRoot: __dirname + "/dist",
remoteRoot: "/public_html/remote-folder/",
include: ["*", "**/*", ".htaccess"], // this would upload everything except dot files
// e.g. exclude sourcemaps, and ALL files in node_modules (including dot files)
exclude: ["dist/**/*.map", "node_modules/**", "node_modules/**/.*", ".git/**"],
// delete ALL existing files at destination before uploading, if true
deleteRemote: false,
// Passive mode is forced (EPSV command is not sent)
forcePasv: true
};
// use with promises
ftpDeploy
.deploy(config)
.then(res => console.log("finished:", res))
.catch(err => console.log(err));
ftpDeploy.on("uploading", function(data) {
console.log(data.filename); // partial path with filename being uploaded
});

9665
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

56
package.json Executable file
View File

@ -0,0 +1,56 @@
{
"name": "astrolabe-website",
"version": "0.1.0",
"description": "Site web de la coopérative Astrolabe CAE",
"main": "index.js",
"dependencies": {
"@11ty/eleventy": "^0.10.0",
"@11ty/eleventy-plugin-rss": "^1.0.7",
"@11ty/eleventy-plugin-syntaxhighlight": "^2.0.3",
"@tbranyen/jsdom": "^13.0.0",
"concurrently": "^4.1.2",
"html-minifier": "^4.0.0",
"image-size": "^0.8.3",
"json-to-scss": "^1.5.0",
"sass": "^1.26.3",
"semver": "^6.3.0",
"slugify": "^1.4.0",
"stalfos": "github:hankchizljaw/stalfos#c8971d22726326cfc04089b2da4d51eeb1ebb0eb"
},
"devDependencies": {
"@erquhart/rollup-plugin-node-builtins": "^2.1.5",
"bl": "^3.0.0",
"chokidar-cli": "^2.1.0",
"cross-env": "^5.2.1",
"ftp-deploy": "^2.3.7",
"make-dir-cli": "^2.0.0",
"prettier": "^1.19.1",
"rollup": "^1.32.1",
"rollup-plugin-commonjs": "^10.1.0",
"rollup-plugin-json": "^4.0.0",
"rollup-plugin-node-resolve": "^5.2.0",
"stylelint": "^13.6.1",
"stylelint-config-sass-guidelines": "^7.0.0"
},
"scripts": {
"sass:tokens": "npx json-to-scss src/_data/tokens.json src/scss/_tokens.scss",
"sass:lint": "npx stylelint src/scss/**/*.scss",
"sass:process": "npm run sass:tokens && npm run sass:lint && sass src/scss/global.scss src/_includes/assets/css/global.css --style=compressed",
"start": "concurrently \"npm run sass:process -- --watch\" \"npm run serve\"",
"serve": "cross-env ELEVENTY_ENV=development npx eleventy --serve",
"prod": "cross-env ELEVENTY_ENV=prod npm run sass:process && npx eleventy",
"deploy-preprod": "npm run prod && node deploy-preprod",
"deploy-prod": "npm run prod && node deploy-prod"
},
"repository": {
"type": "git",
"url": "git+https://git.ouvaton.coop/astrolabe/SiteWebAstrolabe.git"
},
"keywords": [],
"author": "Yves Gatesoupe",
"license": "MIT",
"bugs": {
"url": "https://git.ouvaton.coop/astrolabe/SiteWebAstrolabe/issues"
},
"homepage": "https://git.ouvaton.coop/astrolabe/SiteWebAstrolabe"
}

12
src/.htaccess Normal file
View File

@ -0,0 +1,12 @@
# Prevent viewing of htaccess file.
<Files .htaccess>
order allow,deny
deny from all
</Files>
# Prevent directory listings
Options All -Indexes
ErrorDocument 404 /404.html
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https [OR]
RewriteCond %{HTTP_HOST} ^astrolabe\.coop [NC]
RewriteRule ^ https://www.astrolabe.coop%{REQUEST_URI} [L,NE,R=301]

10
src/404.md Normal file
View File

@ -0,0 +1,10 @@
---
title: '404 - not found'
layout: layouts/page.njk
permalink: 404.html
eleventyExcludeFromCollections: true
---
![404 not found](/images/404.svg)
Nous sommes désolés, ce contenu n'a pas pu être trouvé. Vous pouvez [revenir à l'accueil](/)

9
src/_data/global.js Normal file
View File

@ -0,0 +1,9 @@
module.exports = {
random() {
const segment = () => {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
};
return `${segment()}-${segment()}-${segment()}`;
},
now: Date.now()
};

10
src/_data/helpers.js Normal file
View File

@ -0,0 +1,10 @@
module.exports = {
getNextHeadingLevel(currentLevel) {
return parseInt(currentLevel, 10) + 1;
},
getReadingTime(text) {
const wordsPerMinute = 200;
const numberOfWords = text.split(/\s/g).length;
return Math.ceil(numberOfWords / wordsPerMinute);
}
};

34
src/_data/navigation.json Normal file
View File

@ -0,0 +1,34 @@
{
"items": [
{
"text": "Accueil",
"url": "/",
"external": false
},
{
"text": "Comprendre la CAE",
"url": "/comprendre-la-cae/",
"external": false
},
{
"text": "Nous rejoindre",
"url": "/nous-rejoindre/",
"external": false
},
{
"text": "L'équipe",
"url": "/equipe/",
"external": false
},
{
"text": "Actualité",
"url": "/posts/",
"external": false
},
{
"text": "Nous contacter",
"url": "#contact-form",
"external": false
}
]
}

25
src/_data/site.json Normal file
View File

@ -0,0 +1,25 @@
{
"showThemeCredit": true,
"name": "Astrolabe CAE",
"shortDesc": "Site web de la coopérative Astrolabe CAE",
"url": "https:/preprod.astrolabe.coop",
"authorEmail": "contacte@astrolabe.coop",
"authorHandle": "@AstrolabeCae",
"authorName": "Astrolabe CAE",
"authorAddress": "34 La Ville Allée",
"authorCity": "35630 HEDE BAZOUGES",
"authorSocial": {
"mastodon": "https://framapiaf.org/@AstrolabeCAE",
"twitter": "https://twitter.com/AstrolabeCae",
"linkedin": "https://www.linkedin.com/company/astrolabe-cae/"
},
"designerName": "Yves Gatesoupe",
"designerHandle": "/members/yves-gatesoupe/",
"illustrators": "Igé Maulana, Leopold Merleau, Visual Glow, Galaxicon, Made, Eucalyp, yurr",
"enableThirdPartyComments": false,
"maxPostsPerPage": 5,
"maxNewsPerPage": 4,
"maxProfilePreview": 3,
"maxPartnerPerPage": 4,
"faviconPath": "/images/favicon.png"
}

28
src/_data/styleguide.js Normal file
View File

@ -0,0 +1,28 @@
const tokens = require('./tokens.json');
module.exports = {
colors() {
let response = [];
Object.keys(tokens.colors).forEach(key => {
response.push({
value: tokens.colors[key],
key
});
});
return response;
},
sizes() {
let response = [];
Object.keys(tokens['size-scale']).forEach(key => {
response.push({
value: tokens['size-scale'][key],
key
});
});
return response;
}
};

29
src/_data/tokens.json Normal file
View File

@ -0,0 +1,29 @@
{
"size-scale": {
"base": "1rem",
"300": "0.8rem",
"500": "1.25rem",
"600": "1.56rem",
"700": "1.95rem",
"800": "2.44rem",
"900": "3.05rem",
"max": "4rem"
},
"colors": {
"primary": "#d6f253",
"primary-shade": "#102538",
"primary-glare": "#f1fcbe",
"secondary": "#282156",
"highlight": "#d6f253",
"light-blue": "#97dffc",
"light-gray": "#f1f0f7",
"light": "#fff",
"mid": "#ccc",
"dark": "#111",
"slate": "#404040"
},
"fonts": {
"base": "\"'Open Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'\"",
"brand": "\"'Varela', sans-serif\""
}
}

View File

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="icon" href="{{ site.faviconPath }}" type="image/png" />
{% include "partials/global/meta-info.njk" %}
<script>document.documentElement.classList.remove('no-js');</script>
<style>{% include "assets/css/global.css" %}</style>
{% block head %}
{% endblock %}
</head>
<body>
{% include "partials/global/site-head.njk" %}
{% block content %}
{% endblock content %}
{% include "partials/global/site-foot.njk" %}
{% block foot %}
{% endblock %}
<script type="text/javascript" src="/js/components/menu-toggle.js" async defer></script>
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/service-worker.js');
});
}
</script>
</body>
</html>

View File

@ -0,0 +1,18 @@
{% extends 'layouts/base.njk' %}
{# Intro content #}
{% set introHeading = title %}
{% block content %}
<main id="main-content" tabindex="-1">
<article class="[ post ] [ h-entry ]">
{% include "partials/components/intro.njk" %}
<div class="[ post__body ] [ inner-wrapper ] [ leading-loose pad-top-900 pad-bottom-900 text-500 ] [ sf-flow ] [ e-content ]">
{{ content | safe }}
{% include "partials/components/contact-form.njk" %}
</div>
</article>
</main>
{% endblock %}
{{ content | safe }}

View File

@ -0,0 +1,18 @@
{% extends 'layouts/base.njk' %}
{# Set lists content #}
{% set newsListHeading = newsHeading %}
{% set newsListItems = collections.newsFeed %}
{% set customersListItems = collections.customers %}
{% set partnersListItems = collections.partners %}
{% block content %}
<main id="main-content" class="home" tabindex="-1">
{% include "partials/components/intro.njk" %}
{% include "partials/components/posts-list-home.njk" %}
{% include "partials/components/presentation.njk" %}
{% include "partials/components/customers.njk" %}
{% include "partials/components/contact-form.njk" %}
{% include "partials/components/partners.njk" %}
</main>
{% endblock %}

View File

@ -0,0 +1,42 @@
{% extends 'layouts/base.njk' %}
{% set title = name %}
{% block content %}
<main id="main-content" tabindex="-1">
<section class="[ wrapper member ]">
<article>
<h1>{{ name }}</h1>
<p class="position">{{ position }}</p>
{% if positionInternal %}
<p>{{ positionInternal }}</p>
{% endif %}
<div class="[ member__wrapper ]">
<div class="member__info">
<img src="{{ profile }}" alt="photo de {{ name }}">
{% if personalSite %}
<p>
<strong>site web :</strong>
<a href="{{ personalSite }}">{{ personalSite }}</a>
</p>
{% endif %}
{% if socialMastodon %}
<a href="{{ socialMastodon }}" class="social" title="mastodon"><svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M16.956 18.293c3.007-.36 5.625-2.212 5.954-3.905.519-2.667.476-6.508.476-6.508 0-5.207-3.411-6.733-3.411-6.733C18.255.357 15.302.025 12.233 0h-.075c-3.068.025-6.02.357-7.74 1.147 0 0-3.41 1.526-3.41 6.733 0 .315-.003.647-.004.993-.005.96-.01 2.024.018 3.136.123 5.091.933 10.11 5.64 11.355 2.171.575 4.035.695 5.535.613 2.722-.151 4.25-.972 4.25-.972l-.09-1.974s-1.945.613-4.13.538c-2.163-.074-4.448-.233-4.798-2.89a5.448 5.448 0 01-.048-.745s2.124.519 4.816.642c1.647.076 3.19-.096 4.759-.283zm2.406-3.705V8.283c0-1.288-.328-2.312-.987-3.07-.68-.757-1.57-1.145-2.674-1.145-1.278 0-2.246.491-2.885 1.474l-.623 1.043-.622-1.043c-.64-.983-1.608-1.474-2.886-1.474-1.104 0-1.994.388-2.674 1.146-.659.757-.987 1.781-.987 3.07v6.303h2.498V8.47c0-1.29.543-1.945 1.628-1.945 1.2 0 1.802.777 1.802 2.312v3.35h2.483v-3.35c0-1.535.601-2.312 1.801-2.312 1.086 0 1.629.655 1.629 1.945v6.119h2.497z" fill="#282156"/></svg></a>
{% endif %}
{% if socialTwitter %}
<a href="{{ socialTwitter }}" class="social" title="twitter"><svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M24 4.309a9.83 9.83 0 01-2.828.775 4.932 4.932 0 002.165-2.724 9.864 9.864 0 01-3.127 1.195A4.916 4.916 0 0016.616 2c-3.179 0-5.515 2.966-4.797 6.045A13.978 13.978 0 011.671 2.901a4.93 4.93 0 001.523 6.574 4.903 4.903 0 01-2.229-.616c-.054 2.281 1.581 4.415 3.949 4.89a4.935 4.935 0 01-2.224.084 4.928 4.928 0 004.6 3.419A9.9 9.9 0 010 19.292a13.94 13.94 0 007.548 2.212c9.142 0 14.307-7.721 13.995-14.646A10.025 10.025 0 0024 4.309z" fill="#282156"/></svg></a>
{% endif %}
{% if socialLinkedin %}
<a href="{{ socialLinkedin }}" class="social" title="linkedin"><svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4.98 2.5A2.49 2.49 0 012.5 5 2.49 2.49 0 01.02 2.5C.02 1.12 1.13 0 2.5 0a2.49 2.49 0 012.48 2.5zM5 7H0v16h5V7zm7.982 0H8.014v16h4.969v-8.399c0-4.67 6.029-5.052 6.029 0V23H24V12.869c0-7.88-8.922-7.593-11.018-3.714V7z" fill="#282156"/></svg></a>
{% endif %}
</div>
<div class="member__bio">
{{ content | safe }}
</div>
</div>
</article>
<a class="return-link" href="/equipe">Voir tous les membres</a>
</section>
{% include "partials/components/contact-form.njk" %}
</main>
{% endblock %}

View File

@ -0,0 +1,12 @@
{% extends 'layouts/base.njk' %}
{% block content %}
<main id="main-content" tabindex="-1">
<article class="[ post ]">
<div class="[ post__body ] [ wrapper ]">
{{ content | safe }}
</div>
</article>
{% include "partials/components/contact-form.njk" %}
</main>
{% endblock %}

View File

@ -0,0 +1,20 @@
{% extends 'layouts/base.njk' %}
{% block content %}
<main id="main-content" tabindex="-1">
<article class="[ post wrapper ]">
<div class="[ post__body ]">
<h1>{{ title }}</h1>
<div class="post-info">
Publié le <strong>{{ date | dateFilter }}</strong>{%if author %} | {{ author }}{% endif %}
</div>
{% if illustration %}
<img class="post-pic" src="{{ illustration }}" alt="illustration de l'article">
{% endif %}
{{ content | safe }}
<a class="return-link" href="/posts">Voir toute l'actualité</a>
</div>
</article>
{% include "partials/components/contact-form.njk" %}
</main>
{% endblock %}

View File

@ -0,0 +1,26 @@
{% extends 'layouts/base.njk' %}
{% set newsListItems = collections.events %}
{% block content %}
<main id="main-content" class="posts" tabindex="-1">
<div class="[ wrapper ]">
<h1 class="[ member-list__heading ]">{{ pageHeading }}</h1>
<ul class="post-filter">
<li>
<a href="/posts">Tout</a>
</li>
<li>
<a href="/posts-news">Actualités</a>
</li>
<li class="active">
<a href="/posts-events">Évènements</a>
</li>
</ul>
</div>
<section class="[ news-list wrapper ]">
{% include "partials/components/posts-list.njk" %}
</section>
{% include "partials/components/contact-form.njk" %}
</main>
{% endblock %}

View File

@ -0,0 +1,26 @@
{% extends 'layouts/base.njk' %}
{% set newsListItems = collections.news %}
{% block content %}
<main id="main-content" class="posts" tabindex="-1">
<div class="[ wrapper ]">
<h1 class="[ member-list__heading ]">{{ pageHeading }}</h1>
<ul class="post-filter">
<li>
<a href="/posts">Tout</a>
</li>
<li class="active">
<a href="/posts-news">Actualités</a>
</li>
<li>
<a href="/posts-events">Évènements</a>
</li>
</ul>
</div>
<section class="[ news-list wrapper ]">
{% include "partials/components/posts-list.njk" %}
</section>
{% include "partials/components/contact-form.njk" %}
</main>
{% endblock %}

View File

@ -0,0 +1,27 @@
{% extends 'layouts/base.njk' %}
{% set newsListItems = collections.posts %}
{% block content %}
<main id="main-content" class="posts" tabindex="-1">
<div class="[ wrapper ]">
<h1 class="[ member-list__heading ]">{{ pageHeading }}</h1>
<ul class="post-filter">
<li class="active">
<a href="/posts">Tout</a>
</li>
<li>
<a href="/posts-news">Actualités</a>
</li>
<li>
<a href="/posts-events">Évènements</a>
</li>
</ul>
</div>
<section class="[ news-list wrapper ]">
{% include "partials/components/posts-list.njk" %}
</section>
{% include "partials/components/contact-form.njk" %}
</main>
{% endblock %}

View File

@ -0,0 +1,14 @@
{% extends 'layouts/base.njk' %}
{% set teamListItems = collections.members %}
{% block content %}
<main id="main-content" tabindex="-1">
<div class="[ wrapper ]">
<h1 class="[ member-list__heading ]">{{ teamListHeading }}</h1>
{{ content | safe }}
</div>
{% include "partials/components/member-list.njk" %}
{% include "partials/components/contact-form.njk" %}
</main>
{% endblock %}

View File

@ -0,0 +1,181 @@
{# ===================
Forms
=================== #}
{% macro label( text, name ) %}
<label class="question__label" for="field-{{ name }}">{{ text }}</label>
{% endmacro %}
{% macro field( type, name, data ) %}
<br>
<input class="question__field"
type="{{ type }}"
name="{{ name }}"
id="field-{{ name }}"
{% if data.required %}required aria-required="true"{% endif %}
{% if data.placeholder %}placeholder="{{ data.placeholder }}"{% endif %}
{% if data.pattern %}pattern="{{ data.pattern }}"{% endif %}
{% if data.description %}aria-describedby="description-{{ name }}"{% endif %}
{% if data.autocomplete %}autocomplete="{{ data.autocomplete }}"{% endif %}
{% if data.autocorrect %}autocorrect="{{ data.autocorrect }}"{% endif %}
{% if data.spellcheck %}spellcheck="{{ data.spellcheck }}"{% endif %}
{% if data.autocapitalize %}autocapitalize="{{ data.autocapitalize }}"{% endif %}
>
{% if data.description %}
<br>
{{ description( name, data.description ) }}
{% endif %}
{% endmacro %}
{% macro confirm( text, name, data ) %}
<label for="field-{{ name }}" class="question--confirm">
<input class="question__field question__field--confirm"
type="checkbox"
name="{{ name }}"
id="field-{{ name }}"
value="1"
{% if data.required %}required aria-required="true"{% endif %}
{% if data.description %}aria-describedby="description-{{ name }}"{% endif %}
>
{{ text }}
</label>
{% if data.description %}
<br>
{{ description( name, data.description ) }}
{% endif %}
{% endmacro %}
{% macro select( name, options, data ) %}
<br>
<select id="field-{{ name }}"
name="{{ name }}"
{% if data.required %}required aria-required="true"{% endif %}
{% if data.multiple %}multiple{% endif %}
{% if data.description %}aria-describedby="description-{{ name }}"{% endif %}
>
{% for opt in data.options_before %}
{{ option( opt ) }}
{% endfor %}
{% for opt in options %}
{{ option( opt ) }}
{% endfor %}
{% for opt in data.options_after %}
{{ option( opt ) }}
{% endfor %}
</select>
{% if data.description %}
<br>
{{ description( name, data.description ) }}
{% endif %}
{% endmacro %}
{% macro option( data ) %}
{% if data.value %}
<option value="{{ data.value }}">{{ data.label }}</option>
{% else %}
<option>{{ data }}</option>
{% endif %}
{% endmacro %}
{% macro textarea( name, data ) %}
<br>
<textarea id="field-{{ name }}"
name="{{ name }}"
{% if data.rows %}rows="{{ data.rows }}"{% else %}rows="5"{% endif %}
cols="100"
{% if data.required %}required aria-required="true"{% endif %}
{% if data.autocorrect %}autocorrect="{{ data.autocorrect }}"{% endif %}
{% if data.spellcheck %}spellcheck="{{ data.spellcheck }}"{% endif %}
{% if data.autocapitalize %}autocapitalize="{{ data.autocapitalize }}"{% endif %}
{% if data.description %}aria-describedby="description-{{ name }}"{% endif %}
></textarea>
{% if data.description %}
{{ description( name, data.description ) }}
{% endif %}
{% endmacro %}
{% macro radios( label, name, options, data ) %}
<fieldset>
<legend
{% if data.description %}aria-describedby="description-{{ name }}"{% endif %}
>{{ label }}</legend>
<ul class="field-list__field-group__list">
{% for option in options %}
<li>
{% if option.value %}
<label for="field-{{ name }}-{{ option.value }}">
<input type="radio"
name="{{ name }}"
id="field-{{ name }}-{{ option.value }}"
value="{{ option.value }}"
{% if option.note %}aria-describedby="description-{{ name }}-{{ option.value }}"{% endif %}
>{{ option.label }}</label>
{% else %}
<label for="field-{{ name }}-{{ option }}">
<input type="radio"
name="{{ name }}"
id="field-{{ name }}-{{ option }}"
value="{{ option }}"
>{{ option }}</label>
{% endif %}
{% if option.note %}
<br>
{{ description( ( name + '-' + option.value ), option.note ) }}
{% endif %}
</li>
{% endfor %}
</ul>
{% if data.description %}
{{ description( name, data.description ) }}
{% endif %}
</fieldset>
{% endmacro %}
{% macro checkboxes( label, name, options, data ) %}
<fieldset>
<legend
{% if data.description %}aria-describedby="description-{{ name }}"{% endif %}
>{{ label }}</legend>
<ul class="field-list__field-group__list">
{% for option in options %}
<li>
{% if option.value %}
<label for="field-{{ name }}-{{ option.value }}">
<input type="checkbox"
name="{{ name }}"
id="field-{{ name }}-{{ option.value }}"
value="{{ option.value }}"
{% if option.note %}aria-describedby="description-{{ name }}-{{ option.value }}"{% endif %}
>{{ option.label }}</label>
{% else %}
<label for="field-{{ name }}-{{ option }}">
<input type="checkbox"
name="{{ name }}"
id="field-{{ name }}-{{ option }}"
value="{{ option }}"
>{{ option }}</label>
{% endif %}
{% if option.note %}
<br>
{{ description( ( name + '-' + option.value ), option.note ) }}
{% endif %}
</li>
{% endfor %}
</ul>
{% if data.description %}
{{ description( name, data.description ) }}
{% endif %}
</fieldset>
{% endmacro %}
{% macro description( id, html ) %}
<em class="[ field-list__field-group__description ]" id="description-{{ id }}">{{ html | safe }}</em>
{% endmacro %}
{% macro hidden_field( name, value ) %}
<input type="hidden" name="{{ name }}" id="field-{{ name }}" value="{{ value }}">
{% endmacro %}
{% macro button( text ) %}
<button type="submit" class="[ btn btn-secondary ]">{{ text }}</button>
{% endmacro %}

View File

@ -0,0 +1,4 @@
{# ========================
Site-specific Macros
======================== #}

View File

@ -0,0 +1,46 @@
{% from "macros/form.njk" import label, field, select, option, textarea, checkboxes, button %}
<section class="[ form-container ]">
<svg aria-hidden="true" viewBox="0 0 1440 131" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="#fff" d="M0 0h1440v131H0z"/><path d="M0 4.643l40-2.326c40-2.5 120-6.888 200 11.67 80 18.735 160 60.854 240 74.894 80 14.04 160 0 240-16.365 80-16.54 160-34.968 240-28.08 80 7.152 160 39.619 240 39.75 80-.131 160-32.598 200-49.139l40-16.365V131H0V4.643z" fill="#D6F253"/></svg>
<div class="[ inner-wrapper ]">
<h2 id="contact-form" class="[ contact-heading ]">Nous contacter</h2>
<form name="contact" method="POST" action="/form/contact-form-handler.php">
<ol class="[ field-list ]">
<li class="[ field-list__field-group ]">
{{ label("Nom", "namezzz") }}
{{ field( "text", "namezzz", { required: true, placeholder: "", autocomplete: "name", autocorrect: "off", autocapitalize: "off" } ) }}
</li>
<li class="[ field-list__field-group ]">
{{ label("Email", "emailzzz") }}
{{ field( "email", "emailzzz", { required: true, placeholder: "", autocomplete: "email" } ) }}
</li>
<li class="[ field-list__field-group ] [ full-width ]">
{{ label("Je vous contacte pour :", "select") }}
{{ select( "select", [
{label: "Obtenir un rendez-vous (décrivez votre projet en quelques lignes)", value: "option 1"},
{label: "Obtenir des précisions sur le statut dentrepreneur salarié", value: "option 2"},
{label: "Proposer une mission à un coopérateur", value: "option 3"},
{label: "Proposer un partenariat", value: "option 4"}
], { required: true, options_before: [""], options_after: ["Autre demande"] } ) }}
</li>
<li class="[ field-list__field-group ] [ full-width ]">
{{ label("Votre message", "message") }}
{{ textarea( "message", { required: true, autocapitalize: "sentences", spellcheck: "true" } ) }}
</li>
<li class="[ field-list__field-group ] [ full-width ]">
{{ checkboxes("", "subscribe", [ "Je souhaite être tenu au courant de lactualité Astrolabe"], { description: "" } ) }}
</li>
<!-- H o n e y p o t -->
<li aria-hidden="true">
<label class="ohnohoney" for="name"></label>
<input tabindex="-1" class="ohnohoney" autocomplete="off" type="text" id="name" name="name" placeholder="Your name here">
</li>
<li aria-hidden="true">
<label class="ohnohoney" for="email"></label>
<input tabindex="-1" class="ohnohoney" autocomplete="off" type="email" id="email" name="email" placeholder="Your e-mail here">
</li>
</ol>
{{ button("Envoyer") }}
</form>
</div>
</section>

View File

@ -0,0 +1,16 @@
<section class="[ partner ]">
<div class="[ wrapper ]">
<p class="[ partner__heading ]">{{ customersHeading }}</p>
{% if customersListItems.length %}
<ol class="[ partner__list ]">
{% for item in customersListItems %}
<li class="partner__list-item">
<a href="{{ item.data.url }}" title="{{ item.data.name }}" target="_blank" rel="noreferrer noopener">
<img src="{{ item.data.thumbnail }}" alt="logo de {{ item.data.name }}">
</a>
</li>
{% endfor %}
</ol>
{% endif %}
</div>
</section>

View File

@ -0,0 +1,12 @@
<header class="[ intro ]">
<div class="[ wrapper ]">
<h1 class="[ intro__heading ]">{{ brandHeading }}</h1>
<svg viewBox="0 0 127 237" width="100%" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M116.77 20.74c-.472-1.843-2.433-5.326-6.48-5.326h-4.283C105.395 6.814 98.249 0 89.533 0c-9.116 0-16.534 7.448-16.534 16.605v20.597L10.073 61.124a2.422 2.422 0 00-1.403 3.124c6.302 16.578 22.13 26.795 38.897 26.795 2.778 0 5.582-.315 8.375-.895 2.026.425 4.09.704 6.169.824v21.449a2.422 2.422 0 104.842 0V90.962a41.398 41.398 0 006.046-.8v22.259a2.422 2.422 0 104.843 0v-23.59c16.39-5.573 28.22-21.102 28.22-39.352V20.256h4.228c1.262 0 1.737 1.513 1.793 1.708a2.425 2.425 0 002.94 1.723 2.424 2.424 0 001.747-2.948zM32.478 82.973c-8.206-3.684-14.61-10.117-18.31-18.225l62.113-23.615c.013-.004.023-.013.034-.017.09-.036.173-.083.257-.128.058-.032.119-.058.174-.093.066-.044.124-.096.186-.146.06-.05.127-.095.184-.151.05-.05.092-.109.138-.162.054-.063.112-.124.159-.192.043-.065.077-.136.116-.203.037-.067.079-.131.11-.202.03-.07.05-.146.074-.22.024-.076.053-.15.07-.229.015-.065.019-.132.028-.199.013-.093.028-.187.03-.282l.003-.039V16.605c0-6.485 5.245-11.762 11.69-11.762 6.416 0 11.637 5.226 11.687 11.667v30.547H86.663a2.421 2.421 0 00-2.422 2.422c0 .023.007.043.007.068-.033 15.12-9.538 28.88-23.678 34.255-9.166 3.483-19.144 3.192-28.092-.828zm34.639 3.12c12.614-6.78 21.023-19.79 21.88-34.194h12.133c-1.194 18.255-15.785 32.903-34.013 34.195z" fill="#1E1E1E"/><path d="M89.53 20.256h4.464a2.421 2.421 0 100-4.842h-4.463a2.421 2.421 0 100 4.842zM123.897 194.561h-4.496V114.15a2.241 2.241 0 00-2.248-2.233H6.994c-1.24 0-2.248 1-2.248 2.233v80.411H2.498a2.242 2.242 0 00-2.248 2.234v37.971A2.242 2.242 0 002.498 237h121.399a2.243 2.243 0 002.249-2.234v-37.971a2.243 2.243 0 00-2.249-2.234zM9.243 116.384h105.662v78.177H9.243v-78.177zm112.406 116.149H4.746v-33.505H121.65v33.505z" fill="#1E1E1E"/><path d="M103.663 125.318h-83.18a2.242 2.242 0 00-2.249 2.234v55.841a2.241 2.241 0 002.248 2.233h83.181c1.241 0 2.248-1 2.248-2.233v-55.841a2.242 2.242 0 00-2.248-2.234zm-2.248 55.841H22.73v-51.373h78.685v51.373zM114.904 206.846h-13.488a2.242 2.242 0 00-2.248 2.234v13.401a2.242 2.242 0 002.248 2.234h13.488a2.243 2.243 0 002.249-2.234V209.08a2.243 2.243 0 00-2.249-2.234zm-2.248 13.402h-8.992v-8.935h8.992v8.935zM92.423 206.846h-13.49a2.242 2.242 0 00-2.247 2.234v13.401a2.242 2.242 0 002.248 2.234h13.489a2.242 2.242 0 002.248-2.234V209.08a2.242 2.242 0 00-2.248-2.234zm-2.248 13.402h-8.993v-8.935h8.993v8.935z" fill="#1E1E1E"/><path d="M78.934 134.253H27.227v4.467h51.707v-4.467zM63.197 143.187h-35.97v4.468h35.97v-4.468zM45.212 152.122H27.227v4.467h17.985v-4.467zM58.7 152.122h-8.993v4.467h8.992v-4.467z" fill="#111"/></svg>
<div class="btn-grp">
<a role="button" href="/comprendre-la-cae" class="btn btn-secondary">Une CAE c'est quoi ?</a>
<a role="button" href="/nous-rejoindre" class="btn btn-primary">Nous rejoindre
<svg width="18" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17.602 5.823L12.05.376a1.357 1.357 0 00-1.875 0 1.295 1.295 0 000 1.84l3.278 3.235H1.326C.587 5.451 0 6.027 0 6.752s.587 1.302 1.326 1.302h12.127l-3.278 3.215a1.295 1.295 0 000 1.84 1.349 1.349 0 001.894 0l5.533-5.427c.246-.242.398-.576.398-.93 0-.353-.133-.687-.398-.93z" fill="#111"/></svg>
</a>
</div>
</div>
</header>

View File

@ -0,0 +1,28 @@
<section class="[ member-list ]">
<div class="[ wrapper ]">
{% if teamListItems.length %}
<ol class="[ member-list__items ]" reversed>
{% for item in teamListItems %}
<li class="member-list__item">
{# <div class="img-wrapper"> #}
<img src=" {{ item.data.profile }}" alt="photo de {{ item.data.name }}">
{# </div> #}
<a role="button" href="{{ item.data.url }}" class="btn btn-primary">{{ item.data.name }}&nbsp;
<svg width="18" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17.602 5.823L12.05.376a1.357 1.357 0 00-1.875 0 1.295 1.295 0 000 1.84l3.278 3.235H1.326C.587 5.451 0 6.027 0 6.752s.587 1.302 1.326 1.302h12.127l-3.278 3.215a1.295 1.295 0 000 1.84 1.349 1.349 0 001.894 0l5.533-5.427c.246-.242.398-.576.398-.93 0-.353-.133-.687-.398-.93z" fill="#111"></path></svg>
</a>
<p>{{ item.data.position }}</p>
{% if item.data.positionInternal %}
<p>{{ item.data.positionInternal }}</p>
{% endif %}
</li>
{% endfor %}
<li class="member-list__item info">
<p>Vous êtes porteur dun projet entrepreneurial en numérique et nouvelles technologies ?</p>
<a role="button" href="/nous-rejoindre" class="btn btn-secondary">Rejoignez-nous
<svg width="18" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17.602 5.823L12.05.376a1.357 1.357 0 00-1.875 0 1.295 1.295 0 000 1.84l3.278 3.235H1.326C.587 5.451 0 6.027 0 6.752s.587 1.302 1.326 1.302h12.127l-3.278 3.215a1.295 1.295 0 000 1.84 1.349 1.349 0 001.894 0l5.533-5.427c.246-.242.398-.576.398-.93 0-.353-.133-.687-.398-.93z" fill="#fff"/></svg>
</a>
</li>
</ol>
{% endif %}
</div>
</section>

View File

@ -0,0 +1,26 @@
{% if navigation.items %}
<nav id="menu" class="nav" aria-label="{{ariaLabel}}">
<ul class="[ nav__list ]">
{% for item in navigation.items %}
{% set relAttribute = '' %}
{% set currentAttribute = '' %}
{% if item.rel %}
{% set relAttribute = ' rel="' + item.rel + '"' %}
{% endif %}
{% if page.url == item.url %}
{% set currentAttribute = ' aria-current="page"' %}
{% endif %}
{% if page.url == item.url %}
<li class="nav__item active">
{% else %}
<li class="nav__item">
{% endif %}
<a href="{{ item.url | url }}" {{ relAttribute | safe }}{{ currentAttribute | safe }}>{{ item.text }}</a>
</li>
{% endfor %}
</ul>
</nav>
{% endif %}

View File

@ -0,0 +1,16 @@
<section class="[ partner ]">
<div class="[ wrapper ]">
<p class="[ partner__heading ]">{{ partnersHeading }}</p>
{% if partnersListItems.length %}
<ol class="[ partner__list ]">
{% for item in partnersListItems %}
<li class="partner__list-item">
<a href="{{ item.data.url }}" title="{{ item.data.name }}" target="_blank" rel="noreferrer noopener">
<img src="{{ item.data.thumbnail }}" alt="logo de {{ item.data.name }}">
</a>
</li>
{% endfor %}
</ol>
{% endif %}
</div>
</section>

View File

@ -0,0 +1,10 @@
<section class="[ news-list ]">
<svg aria-hidden="true" viewBox="0 0 1440 349" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="#282156" d="M1440 154H0v195h1440z"/><path d="M1440 54.078l-48 12.41c-48 12.41-144 37.23-240 45.53-96 7.989-192 .232-288-29.01C768 54.079 672 4.438 576 .327c-96-4.421-192 37.463-288 45.452-96 8.3-192-16.52-240-28.931L0 4.437V203h1440V54.078z" fill="#282156"/></svg>
<div class="[ wrapper ]">
<div class="news-list__inner">
<h2 class="[ news-list__heading ]">{{ newsListHeading }}</h2>
{% include "partials/components/posts-list.njk" %}
<a href="/posts" class="return-link">Voir tout</a>
</div>
</div>
</section>

View File

@ -0,0 +1,23 @@
{% if newsListItems.length %}
<ol class="[ news-list__items ]" reversed>
{% for item in newsListItems %}
{% if item.date.getTime() <= global.now %}
<li class="news-list__item {{ item.data.type }}">
<h3 class="news-list__item-heading">
<a href="{{ item.url | url }}" class="news-list__link" rel="bookmark">{{ item.data.title }}</a>
</h3>
<p class="news-list__item-date">
{% if item.data.eventDate %}
<time datetime="{{ item.data.eventDate | w3DateFilter }}">{{ item.data.eventDate | dateFilter }}</time>
{% else %}
<time datetime="{{ item.date | w3DateFilter }}">{{ item.date | dateFilter }}</time>
{% endif %}
{% if item.data.eventTime %}
<time datetime="{{ item.data.eventTime }}">{{ item.data.eventTime }}</time>
{% endif %}
</p>
</li>
{% endif %}
{% endfor %}
</ol>
{% endif %}

View File

@ -0,0 +1,60 @@
{% set profilePics = collections.profiles %}
<section class="[ presentation ]">
<div class="[ wrapper ]">
<article>
<div class="content">
<h2>Qui sommes-nous ?</h2>
<p>
Astrolabe CAE est une scop spécialisée dans le développement de <strong>projets</strong> ou de prestation de <strong>services</strong> autour des métiers du <strong>numérique</strong>.
Notre objectif est de favoriser l<strong>autonomie</strong> et l<strong>émancipation</strong> de nos membres sur un modèle déconomie sociale et <strong>solidaire</strong> (ESS).
</p>
</div>
<div class="side-info">
{# <figure> #}
<img src="/images/crew-join.svg" alt="équipage astrolabe" loading="lazy" style="width: 22rem;">
{# </figure> #}
<a role="button" href="/nous-rejoindre" class="btn btn-primary">Nous rejoindre
<svg width="18" height="14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M17.602 5.823L12.05.376a1.357 1.357 0 00-1.875 0 1.295 1.295 0 000 1.84l3.278 3.235H1.326C.587 5.451 0 6.027 0 6.752s.587 1.302 1.326 1.302h12.127l-3.278 3.215a1.295 1.295 0 000 1.84 1.349 1.349 0 001.894 0l5.533-5.427c.246-.242.398-.576.398-.93 0-.353-.133-.687-.398-.93z" fill="#111"></path></svg>
</a>
</div>
</article>
<article>
<div class="content">
<h2>Communs numérique</h2>
<p>
Chez Astrolabe nous aimons et faisons la promotion du <b>logiciel libre</b>. Nos sommes membres d<a href="http://www.alliance-libre.org/" target="_blank" rel="noreferrer noopener">Alliance Libre</a>
et nous mettons nos documents et projets internes à disposition sur notre gitlab.
</p>
</div>
<div class="side-info">
<figure>
<img src="/images/gitlab.svg" alt="logo Gitlab" loading="lazy" width="110" height="101">
</figure>
<a role="button" href="https://framagit.org/astrolabe" class="btn btn-primary btn-icon" target="_blank" rel="noreferrer noopener">Gitlab</a>
</div>
</article>
<article>
<div class="content">
<h2>Des profils variés</h2>
<p>
Nos coopérateurs possèdent des compétences propres allant de développement linux embarqué au web design et créent ainsi la <b>pluralité</b> de nos prestations.
<br><br>
Nous sommes également <b>distributeurs</b> de la solution logicielle <a href="https://www.crealead.com/naega#bootstrap-fieldgroup-nav-item--prsentation" target="_blank" rel="noreferrer noopener">Naega</a>.
</p>
</div>
<div class="side-info">
<ul class="profile-preview">
{% for profile in profilePics %}
<li>
<a href="{{ profile.data.url }}" title="{{ profile.data.name }}">
<img src="{{ profile.data.profile }}" alt="photo de {{ profile.data.name }}">
</a>
</li>
{% endfor %}
</ul>
<a role="button" href="/equipe" class="btn btn-primary">Voir l'équipe</a>
</div>
</article>
</div>
</section>

View File

@ -0,0 +1,41 @@
{% set pageTitle = site.name + ' - ' + title %}
{% set pageDesc = '' %}
{% set siteTitle = site.name %}
{% set currentUrl = site.url + page.url %}
{% if metaTitle %}
{% set pageTitle = metaTitle %}
{% endif %}
{% if metaDesc %}
{% set pageDesc = metaDesc %}
{% endif %}
<title>{{ pageTitle }}</title>
<link rel="canonical" href="{{ currentUrl }}" />
<meta property="og:site_name" content="{{ siteTitle }}" />
<meta property="og:title" content="{{ pageTitle }}" />
<meta property="og:type" content="website" />
<meta property="og:url" content="{{ currentUrl }}" />
{% if site.authorHandle %}
<meta name="twitter:creator" content="@{{ site.authorHandle | replace('@', '') }}" />
{% endif %}
{% if metaDesc %}
<meta name="description" content="{{ metaDesc }}" />
<meta name="twitter:description" content="{{ metaDesc }}" />
<meta property="og:description" content="{{ metaDesc }}" />
{% endif %}
{% if socialImage %}
<meta property="og:image" content="{{ socialImage }}" />
<meta name="twitter:image" content="{{ socialImage }}" />
<meta property="og:image:alt" content="Page image for {{ site.name }}" />
<meta name="twitter:image:alt" content="Page image for {{ site.name }}" />
{% endif %}
{% if site.paymentPointer %}
<meta name="monetization" content="{{ site.paymentPointer }}" />
{% endif %}

View File

@ -0,0 +1,96 @@
const CACHE_KEYS = {
PRE_CACHE: `precache-${VERSION}`,
RUNTIME: `runtime-${VERSION}`
};
// URLS that we dont want to end up in the cache
const EXCLUDED_URLS = [
'/contact',
'/thank-you'
];
// URLS that we want to be cached when the worker is installed
const PRE_CACHE_URLS = [
'/',
'/fonts/varela-round-v12-latin-regular.woff',
'/fonts/varela-v10-latin-regular.woff',
'/fonts/open-sans-v17-latin-300.woff',
'/fonts/open-sans-v17-latin-regular.woff',
'/fonts/open-sans-v17-latin-600.woff',
'/fonts/open-sans-v17-latin-700.woff'
];
// You might want to bypass a certain host
const IGNORED_HOSTS = ['localhost', 'unpkg.com', ];
/**
* Takes an array of strings and puts them in a named cache store
*
* @param {String} cacheName
* @param {Array} items=[]
*/
const addItemsToCache = function(cacheName, items = []) {
caches.open(cacheName).then(cache => cache.addAll(items));
};
self.addEventListener('install', evt => {
self.skipWaiting();
addItemsToCache(CACHE_KEYS.PRE_CACHE, PRE_CACHE_URLS);
});
self.addEventListener('activate', evt => {
// Look for any old caches that don't match our set and clear them out
evt.waitUntil(
caches
.keys()
.then(cacheNames => {
return cacheNames.filter(item => !Object.values(CACHE_KEYS).includes(item));
})
.then(itemsToDelete => {
return Promise.all(
itemsToDelete.map(item => {
return caches.delete(item);
})
);
})
.then(() => self.clients.claim())
);
});
self.addEventListener('fetch', evt => {
const {hostname} = new URL(evt.request.url);
// Check we don't want to ignore this host
if (IGNORED_HOSTS.indexOf(hostname) >= 0) {
return;
}
// Check we don't want to ignore this URL
if (EXCLUDED_URLS.some(page => evt.request.url.indexOf(page) > -1)) {
return;
}
evt.respondWith(
caches.match(evt.request).then(cachedResponse => {
// Item found in cache so return
if (cachedResponse) {
return cachedResponse;
}
// Nothing found so load up the request from the network
return caches.open(CACHE_KEYS.RUNTIME).then(cache => {
return fetch(evt.request)
.then(response => {
// Put the new response in cache and return it
return cache.put(evt.request, response.clone()).then(() => {
return response;
});
})
.catch(ex => {
return;
});
});
})
);
});

View File

@ -0,0 +1,25 @@
<footer role="contentinfo" class="[ site-foot ]">
<div class="wrapper">
<div class="[ site-foot__inner ]">
<div class="">
<h3>Crédits</h3>
<p>Design et intégration : <a class="footer-link" href="{{site.designerHandle}}" target="_blank" rel="noreferrer noopener">{{site.designerName}}</a></p>
<p>Illustrations inspirées par : {{site.illustrators}}
<p>
Généré avec <a class="footer-link" href="https://www.11ty.dev/" target="_blank" rel="noreferrer noopener">Eleventy</a>, basé sur le sarter kit <a class="footer-link" href="https://hylia.website/" target="_blank" rel="noreferrer noopener">Hylia</a>
</p>
</div>
<div class="">
<h3>Mentions légales</h3>
<p>Protection des données</p>
</div>
<div class="">
<h3>Contact</h3>
<p>{{site.authorName}}</p>
<p>{{site.authorAddress}}<br>{{site.authorCity}}</p>
<a href="{{site.authorSocial.mastodon}}" class="social" title="mastodon"><svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M16.956 18.293c3.007-.36 5.625-2.212 5.954-3.905.519-2.667.476-6.508.476-6.508 0-5.207-3.411-6.733-3.411-6.733C18.255.357 15.302.025 12.233 0h-.075c-3.068.025-6.02.357-7.74 1.147 0 0-3.41 1.526-3.41 6.733 0 .315-.003.647-.004.993-.005.96-.01 2.024.018 3.136.123 5.091.933 10.11 5.64 11.355 2.171.575 4.035.695 5.535.613 2.722-.151 4.25-.972 4.25-.972l-.09-1.974s-1.945.613-4.13.538c-2.163-.074-4.448-.233-4.798-2.89a5.448 5.448 0 01-.048-.745s2.124.519 4.816.642c1.647.076 3.19-.096 4.759-.283zm2.406-3.705V8.283c0-1.288-.328-2.312-.987-3.07-.68-.757-1.57-1.145-2.674-1.145-1.278 0-2.246.491-2.885 1.474l-.623 1.043-.622-1.043c-.64-.983-1.608-1.474-2.886-1.474-1.104 0-1.994.388-2.674 1.146-.659.757-.987 1.781-.987 3.07v6.303h2.498V8.47c0-1.29.543-1.945 1.628-1.945 1.2 0 1.802.777 1.802 2.312v3.35h2.483v-3.35c0-1.535.601-2.312 1.801-2.312 1.086 0 1.629.655 1.629 1.945v6.119h2.497z" fill="#fff"/></svg></a>
<a href="{{site.authorSocial.twitter}}" class="social" title="twitter"><svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M24 4.309a9.83 9.83 0 01-2.828.775 4.932 4.932 0 002.165-2.724 9.864 9.864 0 01-3.127 1.195A4.916 4.916 0 0016.616 2c-3.179 0-5.515 2.966-4.797 6.045A13.978 13.978 0 011.671 2.901a4.93 4.93 0 001.523 6.574 4.903 4.903 0 01-2.229-.616c-.054 2.281 1.581 4.415 3.949 4.89a4.935 4.935 0 01-2.224.084 4.928 4.928 0 004.6 3.419A9.9 9.9 0 010 19.292a13.94 13.94 0 007.548 2.212c9.142 0 14.307-7.721 13.995-14.646A10.025 10.025 0 0024 4.309z" fill="#fff"/></svg></a>
<a href="{{site.authorSocial.linkedin}}" class="social" title="linkedin"><svg width="24" height="24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4.98 2.5A2.49 2.49 0 012.5 5 2.49 2.49 0 01.02 2.5C.02 1.12 1.13 0 2.5 0a2.49 2.49 0 012.48 2.5zM5 7H0v16h5V7zm7.982 0H8.014v16h4.969v-8.399c0-4.67 6.029-5.052 6.029 0V23H24V12.869c0-7.88-8.922-7.593-11.018-3.714V7z" fill="#fff"/></svg></a>
</div>
</div>
</footer>

View File

@ -0,0 +1,18 @@
<a class="skip-link" href="#main-content">Skip to content</a>
<header role="banner" class="[ site-head ]">
<div class="wrapper">
<div class="[ site-head__inner ]">
<a href="/" class="[ site-head__site-name ]">
<span class="visually-hidden">{{ site.name }} - Home</span>
{% include "../../../images/astrolabe_logo.svg" %}
</a>
<button class="menu-toggle" onclick="menuToggle(this)" title="ouvrir / fermer le menu">
<svg id="icon-show" aria-hidden="true" width="32" height="32" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M13 10h12M6 16h19m-15 6h15" stroke="#111" stroke-width="2" stroke-linecap="round"/></svg>
<svg id="icon-close" aria-hidden="true" width="32" height="32" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M25.5 7l-19 17m19 0L6.5 7" stroke="#111" stroke-width="2" stroke-linecap="round"/></svg>
<span class="menu-toggle__label">menu</span>
</button>
{% set ariaLabel = 'navigation' %}
{% include "partials/components/nav.njk" %}
</div>
</div>
</header>

View File

@ -0,0 +1,5 @@
---
name: 'Le Web en plus'
thumbnail: '/images/customers/logo-lewebenplus.png'
url: 'https://www.lewebenplus.net/'
---

5
src/customers/naega.md Normal file
View File

@ -0,0 +1,5 @@
---
name: 'Naega'
thumbnail: '/images/customers/logo-naega.png'
url: 'https://www.crealead.com/naega'
---

5
src/customers/smardtv.md Normal file
View File

@ -0,0 +1,5 @@
---
name: 'SmarDTV'
thumbnail: '/images/customers/logo-smardtv.png'
url: 'https://www.smardtv.com/'
---

View File

@ -0,0 +1,5 @@
---
name: 'Technicolor'
thumbnail: '/images/customers/logo-technicolor.png'
url: 'https://www.technicolor.com/'
---

View File

@ -0,0 +1,17 @@
// Stolen from https://stackoverflow.com/a/31615643
const appendSuffix = n => {
var s = ['th', 'st', 'nd', 'rd'],
v = n % 100;
return n + (s[(v - 20) % 10] || s[v] || s[0]);
};
module.exports = function dateFilter(value) {
const dateObject = new Date(value);
// const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
const months = ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juill.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'];
const dayWithSuffix = appendSuffix(dateObject.getDate());
// return `${dayWithSuffix} ${months[dateObject.getMonth()]} ${dateObject.getFullYear()}`;
return `${dateObject.getDate()} ${months[dateObject.getMonth()]} ${dateObject.getFullYear()}`;
};

View File

@ -0,0 +1,9 @@
const markdownIt = require('markdown-it')({
html: true,
breaks: true,
linkify: true
});
module.exports = function markdown(value) {
return markdownIt.render(value);
};

View File

@ -0,0 +1,5 @@
module.exports = function w3cDate(value) {
const dateObject = new Date(value);
return dateObject.toISOString();
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,84 @@
<?php
$errors = '';
$myEmail = 'contact-form@astrolabe.coop'; // email address to send form content
if(empty($_POST['namezzz']) || empty($_POST['emailzzz']) || empty($_POST['message'])) {
$errors .= "\n Error: all fields are required";
}
if(!empty($_POST['name']) && !empty($_POST['email'])) {
$errors .= "\n Error: spam";
}
$name = $_POST['namezzz'];
$emailAddress = $_POST['emailzzz'];
$select = $_POST['select'];
$message = $_POST['message'];
$subscribe = $_POST['subscribe'];
if (!filter_var($emailAddress, FILTER_VALIDATE_EMAIL)) {
$errors .= "\n Error: Invalid email address $emailAddress";
}
if( empty($errors)) {
$headers = array(
"From: " .$myEmail,
"Reply-To: " .$emailAddress,
"MIME-Version: 1.0",
"Content-Type: text/html;charset=UTF-8",
"Content-Transfer-Encoding:8bit"
);
$to = $myEmail;
$emailSubject = "[Formulaire Astrolabe] Nouveau message";
switch ($select) {
case "option 1":
$purpose = "Demande de rendez-vous";
break;
case "option 2":
$purpose = "Demande de précisions sur le statut dentrepreneur salarié";
break;
case "option 3":
$purpose = "Proposition de misson";
break;
case "option 4":
$purpose = "Proposition de partenariat";
break;
default:
$purpose = "Autre demande";
}
$messageWrap = wordwrap($message, 70, "\r\n", false);
$emailBody = "Vous avez reçu un nouveau message depuis le formulaire du site Astrolabe :".
"\r\n\r\nNom: $name \r\nEmail: $emailAddress \r\nRaison: $purpose\r\nSubscribe: $subscribe\r\n\r\n$messageWrap";
$emailBodyHTML = str_replace("\r\n", "<br>", $emailBody);
// send the email
mail($to, $emailSubject, $emailBodyHTML, implode("\r\n", $headers));
// if subscribe add to mailing list
if(!empty($subscribe)) {
// process
// enovoi mail add to mailing list
}
// redirect to the 'thank you' page
header("Location: /thank-you/index.html");
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Contact form handler</title>
</head>
<body>
<!-- This page is displayed only if there is some error -->
<?php
echo nl2br($errors);
?>
</body>
</html>

1
src/images/404.svg Normal file
View File

@ -0,0 +1 @@
<svg width="1084" height="605" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M214.557 403h-203.5v-77l132-231h110l-132 231h93.5v-82.5h99V326h38.5v77h-38.5v77h-99v-77zm390.714-203.5c0-22-11-33-33-33h-60.5c-22 0-33 11-33 33v176c0 22 11 33 33 33h60.5c22 0 33-11 33-33v-176zm99.001 176c0 38.5-8.8 66.55-26.401 84.15-17.233 17.233-45.1 25.85-83.6 25.85h-104.5c-38.5 0-66.55-8.617-84.15-25.85-17.233-17.6-25.85-45.65-25.85-84.15v-176c0-38.5 8.617-66.367 25.85-83.6 17.6-17.6 45.65-26.4 84.15-26.4h104.5c38.5 0 66.367 8.8 83.6 26.4 17.601 17.233 26.401 45.1 26.401 83.6v176zM940.729 403h-203.5v-77l132-231h110l-132 231h93.5v-82.5h99.001V326h38.5v77h-38.5v77h-99.001v-77z" fill="#F1F0F6"/><path d="M261.653 487.589l-2.066-5.789c11.231-4.903 16.955-17.719 12.796-29.387-4.349-12.184-17.839-18.545-30.075-14.181l-27.632 9.859-62.153-72.901a3.387 3.387 0 00-4.776-.38c-12.004 10.236-19.304 24.534-20.557 40.262-1.003 12.613 1.989 24.929 8.49 35.505a59.349 59.349 0 002.875 11.774c4.75 13.313 13.914 24.224 26.017 31.218v21.677a3.386 3.386 0 106.774 0V496.96a59.284 59.284 0 008.712 2.89v15.396a3.386 3.386 0 106.774 0v-14.127a57.99 57.99 0 007.307.477 59.12 59.12 0 0019.887-3.466l39.204-13.987 2.039 5.72c.619 1.737-1.217 3.118-1.452 3.286a3.39 3.39 0 003.816 5.6c2.234-1.502 5.941-5.772 4.02-11.16zm-127.712-71.982c1.019-12.788 6.598-24.473 15.73-33.32l61.361 71.973c.185.217.392.398.614.556.047.034.097.056.146.085.217.138.443.249.68.335.079.027.154.054.235.076.287.079.578.134.874.136.009 0 .018.004.027.004a3.36 3.36 0 001.138-.198l.005-.003a.033.033 0 01.015-.004l29.814-10.635c8.707-3.105 18.324 1.411 21.417 10.077 3.076 8.622-1.443 18.146-10.077 21.305l-40.984 14.621-6.969-19.539v-.005l-.002-.004-.002-.007a3.385 3.385 0 00-4.329-2.052c-.025.009-.045.024-.07.033-20.3 7.204-43.312 1.037-57.289-15.361-9.062-10.629-13.44-24.15-12.334-38.073zm37.841 74.143c-.528-.25-1.018-.555-1.536-.822a3.373 3.373 0 00-1.497-.801c-10.053-5.587-17.859-14.188-22.443-24.731 10.981 9.972 25.338 15.391 39.948 15.391 5.498 0 11.024-.815 16.423-2.391l5.828 16.337c-12.219 3.5-25.132 2.513-36.723-2.983zM241.767 511.859h-13.198a3.386 3.386 0 100 6.774h13.198a3.386 3.386 0 100-6.774z" fill="#000"/><path d="M249.608 469.283c.614 0 1.224-.104 1.808-.314a5.385 5.385 0 003.254-6.873c-.971-2.715-4.134-4.225-6.873-3.254a5.345 5.345 0 00-3.051 2.761 5.332 5.332 0 00-.205 4.106 5.387 5.387 0 005.067 3.574zM249.164 504.82l-11.236-6.923a3.387 3.387 0 00-3.555 5.767l11.237 6.924a3.384 3.384 0 004.66-1.107 3.39 3.39 0 00-1.106-4.661zM279.766 511.859h-13.201a3.387 3.387 0 000 6.774h13.201a3.386 3.386 0 100-6.774zM275.069 499.004a3.383 3.383 0 00-4.66-1.107l-11.239 6.923a3.385 3.385 0 001.78 6.269c.607 0 1.221-.163 1.775-.504l11.238-6.923a3.382 3.382 0 001.106-4.658z" fill="#000"/></svg>

After

(image error) Size: 2.7 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" style="isolation:isolate" viewBox="5416.49 7375.386 77.988 66.385" width="103.984" height="88.513"><g fill="#111"><path d="M5418.41 7440.4c-.15.13-.35.19-.55.17a.79.79 0 01-.51-.26.772.772 0 01-.17-.55c.02-.2.11-.38.26-.51 1.18-.99 2.36-1.99 3.54-2.98 5.12-4.28 10.22-8.59 15.3-12.92 2.43-2.06 4.85-4.14 7.25-6.24.88-.77 1.76-1.55 2.63-2.33.55-.5 1.09-1.01 1.61-1.53 2.17-1.99 4.33-3.98 6.48-5.97 2.1-1.96 4.21-3.9 6.33-5.82 1.9-1.71 3.84-3.38 5.82-5 2.2-1.73 4.41-3.45 6.62-5.17l10.9-8.47c3.12-2.42 6.23-4.85 9.35-7.28.15-.12.35-.17.55-.15.2.03.38.13.5.28.12.16.18.36.15.56a.75.75 0 01-.28.5l-9.35 7.27-10.9 8.48a832.2 832.2 0 00-6.6 5.15c-1.96 1.6-3.88 3.25-5.75 4.95-2.12 1.91-4.23 3.84-6.32 5.79-2.14 2-4.3 3.98-6.46 5.96-.53.54-1.08 1.06-1.65 1.56-.87.79-1.76 1.58-2.64 2.35-2.41 2.1-4.83 4.19-7.26 6.26-5.09 4.32-10.2 8.63-15.31 12.92-1.18.99-2.36 1.98-3.54 2.98z"/><path d="M5416.49 7439.53l.01-.09.46-6.07c.02-.2.11-.38.26-.51.15-.13.35-.2.55-.18.2.02.38.11.51.26.13.15.19.35.18.55l-.46 6.03-.01.05c.01.12.11.23.23.24l6.06.46c.2.02.38.11.51.26.13.15.19.35.18.55a.79.79 0 01-.26.51c-.15.13-.35.19-.55.18l-6.05-.47a1.742 1.742 0 01-1.62-1.74v-.03z"/></g></svg>

After

(image error) Size: 1.2 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" style="isolation:isolate" viewBox="5549.532 7373.252 77.988 66.381" width="103.984" height="88.508"><g fill="#111"><path d="M5549.82 7374.59a.71.71 0 01-.28-.5c-.03-.2.03-.39.15-.55.12-.16.3-.26.5-.28.2-.03.4.03.55.15 3.11 2.43 6.23 4.85 9.35 7.27 3.63 2.83 7.27 5.65 10.9 8.48 2.21 1.71 4.42 3.43 6.62 5.17 1.98 1.61 3.92 3.28 5.82 5 2.12 1.92 4.23 3.86 6.33 5.81 2.15 2 4.31 3.99 6.48 5.97.52.53 1.06 1.04 1.61 1.53.87.79 1.75 1.57 2.63 2.34 2.4 2.09 4.82 4.17 7.24 6.24l15.31 12.92 3.54 2.97c.15.13.24.32.26.51.02.2-.05.4-.17.55-.13.15-.32.25-.51.27-.2.01-.4-.05-.55-.18l-3.54-2.97c-5.11-4.29-10.22-8.6-15.31-12.93-2.43-2.07-4.85-4.15-7.26-6.25-.89-.78-1.77-1.56-2.64-2.35-.57-.51-1.12-1.03-1.65-1.57-2.16-1.97-4.32-3.96-6.46-5.95-2.1-1.95-4.2-3.88-6.32-5.8-1.88-1.7-3.79-3.34-5.75-4.94-2.19-1.73-4.39-3.45-6.6-5.16l-10.9-8.47c-3.12-2.42-6.24-4.85-9.35-7.28z"/><path d="M5619.73 7438.13l6.05-.46c.13-.01.23-.11.24-.24l-.01-.04-.46-6.04c-.01-.2.05-.4.18-.55.13-.15.31-.24.51-.26.2-.01.4.05.55.18.15.13.24.32.26.51l.46 6.07v.09c.01.01.01.02.01.03 0 .44-.17.87-.47 1.19-.3.32-.71.52-1.15.56l-6.05.46c-.2.02-.4-.05-.55-.18a.768.768 0 01-.26-.51c-.01-.2.05-.39.18-.55.13-.15.31-.24.51-.26z"/></g></svg>

After

(image error) Size: 1.2 KiB

1
src/images/arrow.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" style="isolation:isolate" viewBox="5539.25 7677.669 11.5 57.081" width="11.5pt" height="76.108"><g fill="#111"><path d="M5544.25 7678.38c.01-.2.1-.39.24-.52.15-.13.35-.2.54-.19.2.01.39.1.52.24.14.15.2.35.19.55-.1 2.03-.24 4.06-.4 6.09-.17 2.12-.31 4.23-.41 6.34-.07 2.84-.11 5.67-.11 8.5.01 6.08.12 12.15.32 18.22.42 4.82.62 9.65.61 14.48v1.33a.76.76 0 01-.23.53.75.75 0 01-.53.22.72.72 0 01-.53-.23.7.7 0 01-.21-.53v-1.32c.01-4.8-.19-9.61-.61-14.39-.2-6.1-.3-12.2-.32-18.31 0-2.85.04-5.7.11-8.55.1-2.14.24-4.27.42-6.41.16-2.01.29-4.03.4-6.05z"/><path d="M5540.53 7728.89l4.29 4.29c.05.05.11.07.18.07.07 0 .13-.02.18-.07l4.29-4.29a.75.75 0 111.06 1.06l-4.29 4.29c-.33.33-.78.51-1.24.51-.46 0-.91-.18-1.24-.51l-4.29-4.29a.75.75 0 111.06-1.06z"/></g></svg>

After

(image error) Size: 794 B

File diff suppressed because one or more lines are too long

After

(image error) Size: 7.4 KiB

1
src/images/big-boat.svg Normal file
View File

@ -0,0 +1 @@
<svg width="80" height="80" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M26.79 19.182a5.212 5.212 0 00-5.206 5.205 5.212 5.212 0 005.206 5.206 5.212 5.212 0 005.205-5.206 5.212 5.212 0 00-5.205-5.205zm0 8.41a3.21 3.21 0 01-3.206-3.205 3.21 3.21 0 013.206-3.205 3.21 3.21 0 013.205 3.205 3.21 3.21 0 01-3.205 3.206zM45.198 24.387a5.212 5.212 0 00-5.205-5.205 5.212 5.212 0 00-5.206 5.205 5.212 5.212 0 005.206 5.206 5.212 5.212 0 005.205-5.206zm-8.41 0a3.21 3.21 0 013.205-3.205 3.21 3.21 0 013.205 3.205 3.21 3.21 0 01-3.205 3.206 3.21 3.21 0 01-3.206-3.206zM53.198 29.593a5.212 5.212 0 005.205-5.206 5.212 5.212 0 00-5.205-5.205 5.212 5.212 0 00-5.206 5.205 5.212 5.212 0 005.206 5.206zm0-8.411a3.21 3.21 0 013.205 3.205 3.21 3.21 0 01-3.205 3.206 3.21 3.21 0 01-3.206-3.206 3.21 3.21 0 013.206-3.205z" fill="#111"/><path d="M79 78c-2.742 0-5.3-1.24-7.018-3.401-.379-.478-1.186-.478-1.565 0a9.003 9.003 0 01-3.181 2.534L73.45 40.74a1 1 0 00-.802-1.152l-8.362-1.562V13.308a1 1 0 00-1-1H46.687v-7.22A5.093 5.093 0 0041.6 0h-3.2a5.093 5.093 0 00-5.087 5.087v7.221h-16.6a1 1 0 00-1 1v24.717l-8.36 1.562a1 1 0 00-.803 1.152l6.214 36.394A9.005 9.005 0 019.583 74.6c-.379-.478-1.187-.478-1.565 0A8.923 8.923 0 011 78a1 1 0 000 2c2.96 0 5.744-1.18 7.8-3.272A10.89 10.89 0 0016.6 80c2.96 0 5.744-1.18 7.8-3.272A10.89 10.89 0 0032.2 80c2.96 0 5.744-1.18 7.8-3.272A10.89 10.89 0 0047.8 80c2.961 0 5.744-1.18 7.8-3.272A10.891 10.891 0 0063.4 80c2.96 0 5.744-1.18 7.8-3.272A10.891 10.891 0 0079 80a1 1 0 000-2zM35.312 5.087A3.09 3.09 0 0138.4 2h3.2a3.09 3.09 0 013.087 3.087v7.221h-9.374v-7.22zm-17.598 9.221h44.572v23.343l-22.102-4.13c-.033-.006-.066.003-.1 0-.029-.002-.054-.017-.084-.017-.03 0-.055.015-.085.018-.033.002-.066-.007-.099 0l-22.102 4.13V14.307zM32.2 78c-2.742 0-5.3-1.24-7.016-3.401-.38-.478-1.187-.478-1.566 0A8.923 8.923 0 0116.6 78a8.962 8.962 0 01-1.689-.172L8.688 41.373 39 35.708v39.135C37.287 76.848 34.833 78 32.2 78zm24.184-3.401a1 1 0 00-1.567 0A8.922 8.922 0 0147.8 78c-2.633 0-5.088-1.153-6.8-3.158V35.708l30.313 5.665-6.225 36.455A8.96 8.96 0 0163.4 78c-2.743 0-5.3-1.24-7.016-3.401z" fill="#111"/></svg>

After

(image error) Size: 2.1 KiB

1
src/images/crew-join.svg Normal file

File diff suppressed because one or more lines are too long

After

(image error) Size: 18 KiB

1
src/images/crew.svg Normal file

File diff suppressed because one or more lines are too long

After

(image error) Size: 21 KiB

Binary file not shown.

After

(image error) Size: 14 KiB

Binary file not shown.

After

(image error) Size: 14 KiB

Binary file not shown.

After

(image error) Size: 6.1 KiB

Binary file not shown.

After

(image error) Size: 4.4 KiB

View File

@ -0,0 +1,4 @@
<svg width="364" height="375" viewBox="0 0 364 375" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="364" height="375" fill="#F1F0F6"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M122 190C122 156.333 149.11 129 182.499 129C215.891 129 243 156.333 243 190C243 223.667 215.891 251 182.499 251C149.11 251 122 223.667 122 190ZM198.624 198.101L207.71 218C208.225 219.15 209.188 220.05 210.367 220.487C211.546 220.926 212.859 220.87 213.996 220.336C215.137 219.817 216.029 218.847 216.464 217.658C216.898 216.469 216.844 215.146 216.314 213.998L206.055 191.519L198.624 198.101ZM192.019 183.635L182.817 163.487L173.528 183.641L162.592 184.662L176.576 154.323C180.043 146.802 185.651 146.812 189.09 154.347L202.923 184.654L192.019 183.635ZM166.895 198.029L157.45 218.519C156.921 219.669 155.959 220.569 154.781 220.992C153.602 221.431 152.286 221.377 151.149 220.841C150.01 220.309 149.13 219.341 148.696 218.152C148.263 216.963 148.317 215.639 148.845 214.489L159.465 191.448L166.895 198.029Z" fill="white"/>
</svg>

After

(image error) Size: 1.0 KiB

BIN
src/images/favicon.png Normal file

Binary file not shown.

After

(image error) Size: 7.8 KiB

1
src/images/gitlab.svg Normal file
View File

@ -0,0 +1 @@
<svg width="110" height="101" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M109.052 56.536l-5.704-17.493a2.415 2.415 0 00-.138-.47L91.766 3.412a4.54 4.54 0 00-1.669-2.251 4.555 4.555 0 00-2.674-.846 4.478 4.478 0 00-2.661.856 4.464 4.464 0 00-1.632 2.266L72.222 36.942H37.795L26.871 3.438a4.465 4.465 0 00-1.624-2.26 4.478 4.478 0 00-2.65-.862h-.025a4.555 4.555 0 00-4.331 3.125L6.788 38.643c0 .032-.026.057-.035.09L.946 56.538a6.485 6.485 0 002.364 7.272l50.17 36.386a2.57 2.57 0 003.032-.016l50.179-36.37a6.493 6.493 0 002.361-7.275zM34.061 42.085l13.984 42.96-33.57-42.96H34.06zm27.911 42.97l13.41-41.187.578-1.783h19.602L65.19 80.92l-3.218 4.133zM87.467 6.735l9.827 30.206h-19.67l9.844-30.206zm-16.91 35.33l-9.743 29.927L55 89.816l-15.534-47.75h31.09zM22.55 6.736l9.846 30.206H12.739l9.81-30.206zM6.33 59.668a1.38 1.38 0 01-.501-1.547l4.311-13.225 31.624 40.466L6.329 59.668zm97.345 0L68.238 85.352l.118-.154 31.505-40.302 4.312 13.219a1.383 1.383 0 01-.498 1.55" fill="#111"/></svg>

After

(image error) Size: 998 B

1
src/images/mail-sent.svg Normal file
View File

@ -0,0 +1 @@
<svg width="432" height="424" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M427.138 47.33c-.131-2.168-1.579-6.5-6.12-7.375l-4.802-.926c1.171-9.779-5.371-18.966-15.147-20.85-10.227-1.972-20.156 4.78-22.136 15.051l-4.115 21.344-65.822-35.88a2.76 2.76 0 00-3.754 1.106c-11.599 21.278-5.161 47.608 14.089 61.344 4.11 14.377 15.043 25.867 28.94 30.818l-4.924 25.542a2.766 2.766 0 002.193 3.241c1.5.29 2.952-.691 3.241-2.193l4.832-25.066c.438.097.868.216 1.312.301 1.849.357 3.692.582 5.525.712l-4.889 25.36a2.768 2.768 0 005.434 1.048l5.081-26.353c20.654-1.089 38.75-16.1 42.838-37.303l6.318-32.776 4.741.914c1.416.273 1.622 2.072 1.643 2.303a2.77 2.77 0 002.926 2.569 2.77 2.77 0 002.596-2.93zm-71.166 61.023c-12.872-2.481-23.686-11.153-29.119-22.832a47.148 47.148 0 0010.964 3.57c13.995 2.698 28.876-.966 40.013-10.503a2.768 2.768 0 00-3.599-4.203c-13.142 11.254-32.182 13.25-47.372 4.968-19.492-10.625-27.188-34.563-17.992-54.426l66.678 36.346a2.766 2.766 0 003.754-1.106 2.73 2.73 0 00.326-1.27l4.746-24.62c1.402-7.275 8.425-12.06 15.654-10.666 7.197 1.388 11.922 8.378 10.585 15.613l-7.129 36.98c-4.237 21.96-25.547 36.383-47.509 32.149z" fill="#111"/><path d="M401.327 34.763a4.361 4.361 0 00-2.878 1.745 4.35 4.35 0 00-.8 3.261 4.4 4.4 0 005.008 3.68 4.4 4.4 0 003.675-5.012c-.357-2.33-2.673-4.027-5.005-3.674zM299.444 143.496c-2.86.283-5.008 2.903-4.725 5.763l6.485 65.545c.283 2.859 2.902 5.007 5.762 4.724l99.629-9.856c2.859-.283 5.007-2.903 4.725-5.763l-6.485-65.545c-.283-2.859-2.903-5.008-5.763-4.725l-99.628 9.857zm3.14 4.984l94.385-9.338-40.859 46.94c-.915 1.05-3.158 1.272-4.26.422l-49.266-38.024zm-2.151 5.012l33.495 25.808-27.821 31.544-5.674-57.352zm99.628-9.857l5.675 57.352-33.464-25.481 27.789-31.871zm-61.966 38.893l10.527 8.142c3.506 2.705 8.562 2.205 11.47-1.135l8.727-10.047 33.242 25.337-91.599 9.063 27.633-31.36z" fill="#111"/><ellipse cx="193.5" cy="382" rx="193.5" ry="42" fill="#F1F0F6"/></svg>

After

(image error) Size: 1.9 KiB

Binary file not shown.

After

(image error) Size: 20 KiB

Binary file not shown.

After

(image error) Size: 8.4 KiB

Binary file not shown.

After

(image error) Size: 17 KiB

Binary file not shown.

After

(image error) Size: 6.0 KiB

Binary file not shown.

After

(image error) Size: 145 KiB

Binary file not shown.

After

(image error) Size: 92 KiB

Binary file not shown.

After

(image error) Size: 54 KiB

Binary file not shown.

After

(image error) Size: 167 KiB

Binary file not shown.

After

(image error) Size: 31 KiB

Binary file not shown.

After

(image error) Size: 62 KiB

Binary file not shown.

After

(image error) Size: 9.1 KiB

Binary file not shown.

After

(image error) Size: 113 KiB

Binary file not shown.

After

(image error) Size: 95 KiB

Binary file not shown.

After

(image error) Size: 114 KiB

Binary file not shown.

After

(image error) Size: 103 KiB

File diff suppressed because one or more lines are too long

After

(image error) Size: 7.1 KiB

View File

@ -0,0 +1 @@
<svg width="172" height="164" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M102 20.5C102 9.186 111.186 0 122.5 0S143 9.186 143 20.5 133.814 41 122.5 41 102 31.814 102 20.5zm25.964 2.722l3.078 6.688a1.603 1.603 0 002.13.785 1.594 1.594 0 00.786-2.13l-3.476-7.555-2.518 2.212zm-2.239-4.861l-3.117-6.771-3.148 6.773-3.706.343 4.739-10.196c1.175-2.528 3.075-2.524 4.24.008l4.687 10.185-3.695-.342zm-8.513 4.837l-3.2 6.886a1.605 1.605 0 01-2.966-.123c-.147-.4-.129-.845.05-1.231l3.599-7.744 2.517 2.212z" fill="#D6F253"/><path d="M162.633 28v-3.136h3.136V28h-3.136zm-3.416-18.34c1.773-.99 3.556-1.484 5.348-1.484 1.792 0 3.257.476 4.396 1.428 1.157.952 1.736 2.24 1.736 3.864 0 .859-.187 1.624-.56 2.296a5.411 5.411 0 01-1.316 1.624c-.504.43-1.017.85-1.54 1.26-1.232 1.027-1.848 2.23-1.848 3.612v.336h-2.464v-.448c0-.99.177-1.867.532-2.632.355-.784.784-1.41 1.288-1.876a23.34 23.34 0 011.54-1.316c1.232-.933 1.848-1.839 1.848-2.716 0-2.035-1.335-3.052-4.004-3.052-1.549 0-3.164.55-4.844 1.652h-.112V9.66z" fill="#111"/><path d="M77 64c0 .706-.391 1.432-1.2 2.02-.806.586-1.97.98-3.3.98-1.33 0-2.494-.394-3.3-.98-.809-.588-1.2-1.314-1.2-2.02s.391-1.432 1.2-2.02c.806-.586 1.97-.98 3.3-.98 1.33 0 2.494.394 3.3.98.809.588 1.2 1.314 1.2 2.02z" stroke="#111" stroke-width="2" stroke-linejoin="round"/><path d="M95 48.5c0 1.124-.619 2.225-1.788 3.083C92.043 52.44 90.38 53 88.5 53c-1.88 0-3.543-.56-4.712-1.417C82.62 50.725 82 49.623 82 48.5c0-1.124.619-2.225 1.788-3.083C84.957 44.56 86.62 44 88.5 44c1.88 0 3.543.56 4.712 1.417C94.38 46.275 95 47.377 95 48.5z" stroke="#111" stroke-width="2"/><path d="M70.923 123.361l-22.56-4.99v-6.029c4.064-2.434 6.778-6.661 6.778-11.462v-2.423c3.192-.531 5.631-3.12 5.631-6.23a5.78 5.78 0 00-.633-2.632 8.953 8.953 0 001.96.232c.168 0 .323 0 .49-.011 4.616-.255 7.832-4.05 7.963-4.204a1.053 1.053 0 00-.143-1.505c-1.71-1.416-3.408-2.423-5.034-3.02.562-1.715.586-3.142.586-3.253 0-.575-.478-1.062-1.1-1.106-4.256-.3-7.424.508-9.445 2.39l.012-.233C55.428 71.229 48.745 65 40.543 65s-14.885 6.229-14.885 13.885v7.103c-3.276.476-5.8 3.098-5.8 6.25 0 3.154 2.524 5.787 5.8 6.252v2.401c0 4.812 2.702 9.039 6.779 11.462v6.029l-22.561 4.99C4.066 124.655 0 129.413 0 134.945v27.449c0 .608.538 1.106 1.196 1.106.657 0 1.195-.498 1.195-1.106V155.8h13.821v6.594c0 .608.538 1.106 1.196 1.106.657 0 1.196-.498 1.196-1.106V155.8h42.145v6.594c0 .608.537 1.106 1.195 1.106s1.196-.498 1.196-1.106V155.8h15.267v6.594c0 .608.539 1.106 1.196 1.106.658 0 1.196-.498 1.196-1.106v-27.46c0-5.532-4.065-10.29-9.876-11.573zm-52.331 17.281h42.145v5.355H18.591v-5.355zm-2.392 5.366H2.367v-5.355h13.821v5.355h.012zm46.928-5.366h15.28v5.355h-15.28v-5.355zm-60.76-2.212v-3.508c0-.63.071-1.25.203-1.858h75.645c.132.597.204 1.217.204 1.858v3.508H2.367zm30.344-17.846c.466 1.051 1.183 1.958 2.056 2.711H20.457l12.255-2.711zm15.387.011l12.231 2.7H46.055c.872-.753 1.578-1.66 2.044-2.7zm7.042-24.429v-7.9c1.865.499 3.24 2.07 3.24 3.95 0 1.882-1.375 3.464-3.24 3.95zm12.745-11.152c-1.04.952-3.048 2.445-5.452 2.578-1.124.066-2.223-.2-3.3-.752 1.232-.266 2.332-.72 3.276-1.439.885-.663 1.543-1.471 2.045-2.3 1.088.398 2.236 1.04 3.431 1.913zM56.911 80.81c1.315-1.339 3.515-1.992 6.54-1.947-.204 1.305-.813 3.496-2.583 4.835-1.327.995-3.132 1.36-5.38 1.095-.012-.974.155-2.689 1.423-3.983zm-28.886-1.947c0-6.44 5.607-11.672 12.494-11.672s12.494 5.233 12.494 11.639l-.24 6.848-24.748.41v-7.225zm-5.787 13.354c0-1.936 1.459-3.552 3.408-3.994v7.988c-1.961-.432-3.408-2.058-3.408-3.994zm5.787 8.663V88.3l24.725-.41v12.978c0 6.307-5.548 11.44-12.363 11.44-6.815 0-12.362-5.122-12.362-11.428zm12.362 13.652c1.973 0 3.862-.365 5.584-1.018v6.063c-.849 2.124-3.049 3.596-5.56 3.596-2.558 0-4.794-1.538-5.607-3.74v-5.908a16.24 16.24 0 005.583 1.007zm-29.985 10.975l.036-.011h59.9l.035.011c3.216.708 5.763 2.722 7.066 5.355H3.336c1.303-2.622 3.862-4.636 7.066-5.355zm-8.035 28.069v-5.355h13.821v5.355H2.368zm16.225 0v-5.355h42.145v5.355H18.591zm44.536 0v-5.355h15.28v5.355h-15.28z" fill="#111"/></svg>

After

(image error) Size: 3.9 KiB

1
src/images/sailor.svg Normal file
View File

@ -0,0 +1 @@
<svg width="81" height="99" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M70.923 58.36l-22.56-4.989v-6.03c4.064-2.434 6.778-6.66 6.778-11.462v-2.422c3.192-.532 5.631-3.12 5.631-6.23a5.78 5.78 0 00-.633-2.632 8.953 8.953 0 001.96.232c.168 0 .323 0 .49-.011 4.616-.255 7.832-4.05 7.963-4.204a1.053 1.053 0 00-.143-1.505c-1.71-1.416-3.408-2.423-5.034-3.02.562-1.715.586-3.143.586-3.253 0-.575-.478-1.062-1.1-1.107-4.256-.298-7.424.51-9.445 2.39l.012-.232C55.428 6.229 48.745 0 40.543 0S25.658 6.229 25.658 13.885v7.103c-3.276.476-5.8 3.098-5.8 6.25 0 3.154 2.524 5.787 5.8 6.252v2.4c0 4.813 2.702 9.04 6.779 11.463v6.03L9.876 58.371C4.066 59.655 0 64.412 0 69.945v27.449c0 .608.538 1.106 1.196 1.106.657 0 1.195-.498 1.195-1.106V90.8h13.821v6.594c0 .608.538 1.106 1.196 1.106.657 0 1.196-.498 1.196-1.106V90.8h42.145v6.594c0 .608.537 1.106 1.195 1.106s1.196-.498 1.196-1.106V90.8h15.267v6.594c0 .608.539 1.106 1.196 1.106.658 0 1.196-.498 1.196-1.106v-27.46c0-5.532-4.065-10.29-9.876-11.573zM18.592 75.643h42.145v5.355H18.591v-5.355zM16.2 81.008H2.367v-5.355h13.821v5.355h.012zm46.928-5.366h15.28v5.355h-15.28v-5.355zM2.368 73.43v-3.508c0-.63.071-1.25.203-1.858h75.645c.132.597.204 1.217.204 1.859v3.507H2.367zm30.344-17.846c.466 1.051 1.183 1.958 2.056 2.71H20.457l12.255-2.71zm15.387.011l12.231 2.7H46.055c.872-.753 1.578-1.66 2.044-2.7zm7.042-24.429v-7.9c1.865.499 3.24 2.07 3.24 3.95 0 1.881-1.375 3.464-3.24 3.95zm12.745-11.152c-1.04.952-3.048 2.445-5.452 2.578-1.124.066-2.223-.2-3.3-.752 1.232-.266 2.332-.72 3.276-1.439.885-.663 1.543-1.471 2.045-2.3 1.088.398 2.236 1.04 3.431 1.913zM56.911 15.81c1.315-1.339 3.515-1.992 6.54-1.947-.204 1.305-.813 3.496-2.583 4.835-1.327.995-3.132 1.36-5.38 1.095-.012-.974.155-2.688 1.423-3.983zm-28.886-1.947c0-6.44 5.607-11.672 12.494-11.672S53.013 7.424 53.013 13.83l-.24 6.848-24.748.41v-7.225zm-5.787 13.354c0-1.936 1.459-3.552 3.408-3.994v7.988c-1.961-.432-3.408-2.058-3.408-3.994zm5.787 8.663V23.3l24.725-.41v12.978c0 6.307-5.548 11.44-12.363 11.44-6.815 0-12.362-5.122-12.362-11.428zm12.362 13.652a15.75 15.75 0 005.584-1.018v6.063c-.849 2.124-3.049 3.596-5.56 3.596-2.558 0-4.794-1.538-5.607-3.74v-5.908c1.722.631 3.61 1.007 5.583 1.007zM10.402 60.507l.036-.01h59.9l.035.01c3.216.708 5.763 2.722 7.066 5.355H3.336c1.303-2.622 3.862-4.636 7.066-5.355zM2.367 88.576V83.22h13.821v5.355H2.368zm16.225 0V83.22h42.145v5.355H18.591zm44.536 0V83.22h15.28v5.355h-15.28z" fill="#111"/></svg>

After

(image error) Size: 2.4 KiB

View File

@ -0,0 +1 @@
<svg width="86" height="67" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M84.83 64.52c-1.782 0-2.644-.975-3.747-2.205a6.561 6.561 0 00-11.014 0c-1.088 1.23-1.965 2.206-3.746 2.206a3.563 3.563 0 01-2.277-.75l10.378-14.506a1.78 1.78 0 00-1.485-2.615H38.782v-6.574a55.436 55.436 0 0121.433-.255 1.684 1.684 0 002.007-1.414A30.284 30.284 0 0057.84 18.7 45.086 45.086 0 0038.046 1.054a1.173 1.173 0 00-1.682 1.075v11.14a55.736 55.736 0 01-8.483 15.228c-2.177 2.827-7.423 8.242-7.649 8.482a1.3 1.3 0 00-.24 1.499 1.413 1.413 0 001.414.721 40.25 40.25 0 0114.93.905v6.546H9.713a1.78 1.78 0 00-1.81 1.965l2.05 15.792a5.514 5.514 0 01-2.827-2.106 6.969 6.969 0 00-5.457-2.927 1.18 1.18 0 000 2.361c1.781 0 2.644.976 3.732 2.206a6.97 6.97 0 005.5 2.997 6.97 6.97 0 005.486-3.054c1.088-1.23 1.95-2.205 3.732-2.205 1.782 0 2.644.975 3.733 2.205a6.545 6.545 0 0011 0c1.088-1.23 1.95-2.205 3.732-2.205 1.781 0 2.643.975 3.732 2.205a6.545 6.545 0 0011 0c1.088-1.23 1.95-2.205 3.732-2.205 1.781 0 2.644.975 3.733 2.205a6.546 6.546 0 0011.013 0c1.103-1.23 1.965-2.205 3.747-2.205 1.781 0 2.644.975 3.746 2.205a6.984 6.984 0 005.514 2.998 1.18 1.18 0 100-2.362h.028zM38.781 4.052a42.416 42.416 0 0116.965 15.877 28.277 28.277 0 014.242 17.446 58.207 58.207 0 00-21.207.283V4.052zM23.979 36.569c1.824-1.922 4.453-4.778 5.881-6.63a61.83 61.83 0 006.56-10.562V37.7a43.077 43.077 0 00-12.441-1.117v-.014zm47.758 12.385l-2.05 2.828H10.731l-.367-2.828h61.373zM57.09 59.374a6.97 6.97 0 00-5.5 2.997c-1.088 1.23-1.95 2.206-3.732 2.206-1.781 0-2.644-.975-3.732-2.206a6.546 6.546 0 00-11 0c-1.088 1.23-1.95 2.206-3.732 2.206-1.782 0-2.644-.975-3.733-2.206a6.547 6.547 0 00-11 0 6.673 6.673 0 01-2.275 1.923l-1.301-10.038h56.92l-5.655 7.875a6.717 6.717 0 00-5.26-2.757z" fill="#111"/></svg>

After

(image error) Size: 1.7 KiB

1
src/images/thinking.svg Normal file
View File

@ -0,0 +1 @@
<svg width="105" height="68" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M35 20.5C35 9.186 44.186 0 55.5 0S76 9.186 76 20.5 66.814 41 55.5 41 35 31.814 35 20.5zm25.964 2.722l3.078 6.688c.175.386.501.689.9.836.4.147.845.128 1.23-.051.387-.175.69-.5.837-.9.147-.4.128-.844-.051-1.23l-3.476-7.555-2.518 2.212zm-2.239-4.861l-3.117-6.771-3.148 6.773-3.706.343L53.493 8.51c1.175-2.528 3.075-2.524 4.24.008l4.687 10.185-3.695-.342zm-8.513 4.837l-3.2 6.886a1.605 1.605 0 01-2.966-.123c-.147-.4-.129-.845.05-1.231l3.599-7.744 2.517 2.212z" fill="#D6F253"/><path d="M95.633 28v-3.136h3.136V28h-3.136zM92.217 9.66c1.773-.99 3.556-1.484 5.348-1.484 1.792 0 3.257.476 4.396 1.428 1.157.952 1.736 2.24 1.736 3.864 0 .859-.187 1.624-.56 2.296a5.411 5.411 0 01-1.316 1.624c-.504.43-1.017.85-1.54 1.26-1.232 1.027-1.848 2.23-1.848 3.612v.336h-2.464v-.448c0-.99.177-1.867.532-2.632.355-.784.784-1.41 1.288-1.876a23.263 23.263 0 011.54-1.316c1.232-.933 1.848-1.839 1.848-2.716 0-2.035-1.335-3.052-4.004-3.052-1.55 0-3.164.55-4.844 1.652h-.112V9.66z" fill="#111"/><path d="M10 64c0 .706-.391 1.432-1.2 2.02-.806.586-1.97.98-3.3.98-1.33 0-2.494-.394-3.3-.98C1.39 65.432 1 64.706 1 64s.391-1.432 1.2-2.02c.806-.586 1.97-.98 3.3-.98 1.33 0 2.494.394 3.3.98.809.588 1.2 1.314 1.2 2.02z" stroke="#111" stroke-width="2" stroke-linejoin="round"/><path d="M28 48.5c0 1.124-.619 2.225-1.788 3.083C25.044 52.44 23.38 53 21.5 53c-1.88 0-3.544-.56-4.712-1.417C15.62 50.725 15 49.623 15 48.5c0-1.124.619-2.225 1.788-3.083C17.956 44.56 19.62 44 21.5 44c1.88 0 3.544.56 4.712 1.417C27.38 46.275 28 47.377 28 48.5z" stroke="#111" stroke-width="2"/></svg>

After

(image error) Size: 1.6 KiB

9
src/index.md Normal file
View File

@ -0,0 +1,9 @@
---
layout: home
title: Accueil
brandHeading: La Coopérative d'Activité et d'Emploi spécialisée en informatique !
newsHeading: Actualité & Évenements
customersHeading: Ils nous font confiance
partnersHeading: Nos partenaires
metaDesc: 'Astrolabe CAE est une scop spécialisée dans le développement de projets ou de prestation de service services autour des métiers du numérique. Notre objectif est de favoriser lautonomie et lémancipation de nos membres sur un modèle déconomie sociale et solidaire (ESS).'
---

View File

@ -0,0 +1,13 @@
function menuToggle(elm) {
var menu = document.getElementById('menu');
menu.classList.toggle('show');
if (menu.classList.contains('show')) {
elm.querySelector('#icon-show').style.display = 'none';
elm.querySelector('#icon-close').style.display = 'inline';
elm.querySelector('.menu-toggle__label').textContent = 'fermer';
} else {
elm.querySelector('#icon-show').style.display = 'inline';
elm.querySelector('#icon-close').style.display = 'none';
elm.querySelector('.menu-toggle__label').textContent = 'menu';
}
}

View File

@ -0,0 +1,26 @@
---
name: 'Florent Le Saout'
position: 'Développeur systèmes embarqués'
positionInternal: 'Co-fondateur'
date: '2019-07-01'
profile: '/images/profiles/fls-profile.jpg'
personalSite: 'www.astrolabe.coop'
socialTwitter: 'https://twitter.com/AstrolabeCae'
socialLinkedin: 'https://www.linkedin.com/company/astrolabe-cae'
socialMastodon: 'https://framapiaf.org/@AstrolabeCAE'
url: '/members/florent-le-saout'
---
Je suis co-fondateur de la SCOP CAE Astrolabe.
A ce titre je m'occupe de gestion interne, de suivi des membres, de communication et bien d'autres tâches encore.
Je travail dans le domaine de l'informatique depuis plus de 10ans.
Je suis spécialisé dans le domaine de l'embarqué en libre sous linux.
A ce titre, j'ai développé du code que ce soit au niveau driver, middleware, bootloader et de manière générale sur les aspects sécurité.
J'ai aussi développé des compétences en gestion de relation client, notamment pour le suivi au niveau technique.
Dans ce cadre j'ai pu voyager dans de nombreux pays par conséquent rencontrer l'altérité au contact de cultures différentes, et ainsi prendre du recul sur ma propre culture.
Je parle couramment Anglais.
De par mes expériences et rencontres, j'ai développé un intérêt pour le domaine de l'Economie Sociale et Solidaire (ESS), notamment via les coopératives (SCOP et SCIC).

View File

@ -0,0 +1,13 @@
---
name: 'François Bonningues'
position: 'Développeur systèmes embarqués'
date: '2020-05-01'
profile: '/images/profiles/fb-profile.jpg'
socialLinkedin: 'https://www.linkedin.com/in/fran%C3%A7ois-bonningues-51bb3816/'
url: '/members/francois-bonningues'
---
Je développe des logiciels informatiques depuis presque 20 ans. Je maîtrise les différents aspects à savoir la conception, les spécifications et le codage en langage C/C++. Je suis aussi sensible à la qualité du code, le libre et maîtrise les outils d'intégration continue comme Jenkins, les tests unitaires et d'intégration en utilisant notamment le langage Python.
En 2005 j'ai décidé d'évoluer et repris mes études avec un Master en Réseaux et Télécommunications à Supélec et depuis j'ai participé à des projets ambitieux dans le domaine de la télévision numérique et télécommunications comme le projet "compteurs intelligents" pour GrDF en tant que référent technique.
Aujourd'hui je suis heureux d'avoir rejoint la coopérative d'entrepreneurs Astrolabe et vous propose d'apporter mon expertise dans le développement logiciel dans l'embarqué.

3
src/members/members.json Normal file
View File

@ -0,0 +1,3 @@
{
"layout": "layouts/member.njk"
}

View File

@ -0,0 +1,32 @@
---
name: 'Vincent Génieux'
position: 'Développeur senior'
positionInternal: 'Co-fondateur'
date: '2019-01-01'
profile: '/images/profiles/vg-profile.jpg'
url: '/members/vincent-genieux'
socialLinkedin: 'https://www.linkedin.com/in/vincent-g%C3%A9nieux-4223982/'
---
Mon expérience tourne essentiellement autour de trois axes : linux
embarqué, télévision numérique et logiciel libre.
La télévision numérique est un domaine passionnant et vaste : dans la
chaîne de l'image, il y a des défis techniques à tous les niveaux :
l'encodage, la transmission, le décodage avec des ressources contraintes,
l'aspect temps réel, etc.
Depuis longtemps j'ai été convaincu par linux et le logiciel
libre. Aujourd'hui je suis ravi de voir qu'ils se sont imposés
partout, sur le web, dans le monde pro, même les téléphones et les
télévisions sont maintenant basés sur des briques open-source !
L'intérêt de l'open source est multiple : maîtrise des
coûts, maîtrise du code, facilité de trouver des experts qui
connaissent déjà les technos, bien des avantages par rapport aux
solutions 100% maison.
Ces dernières années, je me suis spécialisé sur l'android TV et la
sécurité. Mais je m'intéresse aussi aux technologies de demain : Rust,
WebAssembly et IA.
Je suis une personne qui aime bien apprendre et partager ma
connaissance, je serais ravi de pouvoir vous aider dans vos projets.

View File

@ -0,0 +1,18 @@
---
name: 'Yves Gatesoupe'
position: 'Designer Web'
date: '2020-06-01'
profile: '/images/profiles/yg-profile.jpg'
personalSite: 'https://www.behance.net/ygates'
socialTwitter: 'https://twitter.com/YGdsgn'
socialLinkedin: 'https://www.linkedin.com/in/yves-gatesoupe-05990b17a/'
url: '/members/yves-gatesoupe'
---
Je suis designer web indépendant depuis janvier 2020.
Jai construit mon expérience en tant que développeur web front end pour Orange Business Services en contribuant notamment à la mise en place du Bootstrap Orange [Boosted](https://boosted.orange.com) qui est un framework aux couleurs de la marque avec un focus sur laccessibilité numérique.
Ces deux dernières années jai étendu le champs de mes compétence en passant la certification professionnelle “Ergonomie des interfaces, UX/UI Design” (Usabilis 2018).
Ce parcours me permet aujourdhui de proposer mes services en tant que Designer Web, que ce soit pour la conception dune identité visuelle, dune étude de conception centrée utilisateur, du maquettage et intégration de votre site ou application web.

View File

@ -0,0 +1,195 @@
---
title: 'Comprendre la CAE'
permalink: '/comprendre-la-cae/index.html'
---
# Une entreprise partagée
<div class="split-content">
<div>
Une [Coopérative dActivité et dEmploi](https://fr.wikipedia.org/wiki/Coop%C3%A9rative_d%27activit%C3%A9s_et_d%27emploi) est une entreprise partagée.
<br><br>
Elle permet de mettre en commun une structure et des moyens afin que chacun puisse réaliser son activité en autonomie.
<br><br>
La CAE cest aussi une société coopérative, chacun des associés qui la compose participe aux grandes décisions avec le principe Une personne = Une voix.
</div>
<!-- <iframe width="560" height="315" src="https://www.youtube.com/embed/4QhR_wM0MXk?controls=0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> -->
<video controls src="https://www.astrolabe.coop/media/UneScopCestQuoi-AV.webm">Vidéo de présentation par Les scop</video>
</div>
## Situer le statut dentrepreneur salarié
<details>
<summary>
### Votre démarrage
</summary>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th></th>
<th>Entrepreneur salarié en CAE</th>
<th>Auto-entrepreneur</th>
<th>Gérant société</th>
</tr>
</thead>
<tbody>
<tr>
<td>Création du statut</td>
<td>Simple</td>
<td>Relativement simple</td>
<td>Mise en place complexe</td>
</tr>
<tr>
<td>Aide à la création</td>
<td>ARE* pour les demandeurs d'emploi</td>
<td>ACRE* pour les demandeurs d'emploi</td>
<td>ACRE* pour les demandeurs d'emploi</td>
</tr>
</tbody>
</table>
</div>
*ARE : Aide au Retour à lEmploi
*ACRE : Aide à la Création et Reprise dEntreprise
</details>
<details open>
<summary>
### Votre activité
</summary>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th></th>
<th>Entrepreneur salarié en CAE</th>
<th>Auto-entrepreneur</th>
<th>Gérant société</th>
</tr>
</thead>
<tbody>
<tr>
<td>Assurance de l'activité professionnelle</td>
<td>Assurance RCPro* spécifique à votre activité</td>
<td>À votre charge</td>
<td>À votre charge</td>
</tr>
<tr>
<td>Suivi de l'activité</td>
<td>Une personne référente vous accompagne dans votre projet</td>
<td>Accompagnement à votre charge</td>
<td>Accompagnement à votre charge</td>
</tr>
<tr>
<td>Pouvoir de décision dans la structure</td>
<td>Chaque coopérateur possède un pouvoir égal</td>
<td>Vous êtes seul décisionnaire</td>
<td>Vous êtes seul décisionnaire</td>
</tr>
<tr>
<td>Agrément CIR*</td>
<td>Une demande d'agrément est en cours pour Astrolabe</td>
<td>Vous devez en faire la demande</td>
<td>Vous devez en faire la demande</td>
</tr>
<tr>
<td>Référencement client / Prospection</td>
<td>Vous démarchez directement vos clients et profitez du référencement des coopérateurs auprès de clients grand compte, vous profitez du réseau de coopérateurs et dappels doffres auprès des partenaires</td>
<td>Vous démarchez directement vos clients</td>
<td>Vous démarchez directement vos clients</td>
</tr>
</tbody>
</table>
</div>
*RCPro : Responsabilité Civile Professionnelle
*CIR : Crédit Impôt Recherche
</details>
<details>
<summary>
### Vos obligations
</summary>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th></th>
<th>Entrepreneur salarié en CAE</th>
<th>Auto-entrepreneur</th>
<th>Gérant société</th>
</tr>
</thead>
<tbody>
<tr>
<td>Régime social</td>
<td>Couverture sociale auprès de la sécurité sociale, cotisation au régime général des retraites</td>
<td>Vous êtes redevable de cotisations et contributions à différents organismes de prestations sociales</td>
<td>Vous êtes redevable de cotisations et contributions à différents organismes de prestations sociales</td>
</tr>
<tr>
<td>Obligation comptables</td>
<td>Votre activité comptable est prise en charge</td>
<td>Relativement peu contraignant</td>
<td>Nécessite une expertise comptable</td>
</tr>
<tr>
<td>Obligation fiscales</td>
<td>Impôt sur le revenu</td>
<td>Chiffre d'affaire plafonné<br>Régime simplifié</td>
<td>Impôt sur les sociétés</td>
</tr>
</tbody>
</table>
</div>
</details>
<details>
<summary>
### Votre protection sociale
</summary>
<div class="table-wrapper">
<table>
<thead>
<tr>
<th></th>
<th>Entrepreneur salarié en CAE</th>
<th>Auto-entrepreneur</th>
<th>Gérant société</th>
</tr>
</thead>
<tbody>
<tr>
<td>Assurance chômage</td>
<td>Maintient de lARE* pour les demandeurs demploi si aucun salaire perçu.
Votre activité ouvre des droits à lARE*</td>
<td>Votre activité n'ouvre pas de nouveaux droits ARE*</td>
<td>Votre activité n'ouvre pas de nouveaux droits ARE*</td>
</tr>
<tr>
<td>Retraite</td>
<td>Régime général</td>
<td>Cotisation et droits réduits</td>
<td>Similaire au régime général</td>
</tr>
<tr>
<td>Couverture santé</td>
<td>Sécurité sociale + mutuelle groupe + prévoyance groupe</td>
<td>Sécurité sociale (RSI*) + mutuelle et prévoyance optionnelle</td>
<td>Sécurité sociale (RSI*) + mutuelle et prévoyance optionnelle</td>
</tr>
</tbody>
</table>
</div>
*ARE: Aide au Retour à l'Emploi
*RSI: Régime Social des Indépendants
</details>

Some files were not shown because too many files have changed in this diff Show More