@ossy/design-system-extras 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.js +1 -0
- package/package.json +7 -3
- package/.storybook/main.js +0 -19
- package/.storybook/preview.jsx +0 -35
- package/CHANGELOG.md +0 -166
- package/rollup.config.js +0 -31
- package/src/index.js +0 -3
- package/src/markdown-viewer/MarkdownViewer.jsx +0 -86
- package/src/markdown-viewer/MarkdownViewer.stories.jsx +0 -34
- package/src/markdown-viewer/index.js +0 -1
- package/src/markdown-viewer/styles/atom-one-light.js +0 -114
- package/src/router-layouts/Footer.jsx +0 -38
- package/src/router-layouts/StandardLayout.jsx +0 -95
- package/src/router-layouts/StandardLayout.stories.jsx +0 -40
- package/src/router-layouts/card/Card.layout.jsx +0 -25
- package/src/router-layouts/card/Card.layout.stories.jsx +0 -15
- package/src/router-layouts/card/index.js +0 -1
- package/src/router-layouts/card-sidebar/CardSidebar.jsx +0 -48
- package/src/router-layouts/card-sidebar/CardSidebar.stories.jsx +0 -23
- package/src/router-layouts/card-sidebar/index.js +0 -1
- package/src/router-layouts/card-tabs/CardTabs.jsx +0 -35
- package/src/router-layouts/card-tabs/CardTabs.stories.jsx +0 -22
- package/src/router-layouts/card-tabs/index.js +0 -1
- package/src/router-layouts/index.js +0 -4
- package/src/stories/Button.jsx +0 -39
- package/src/stories/Button.stories.js +0 -49
- package/src/stories/Configure.mdx +0 -364
- package/src/stories/Header.jsx +0 -56
- package/src/stories/Header.stories.js +0 -29
- package/src/stories/Page.jsx +0 -69
- package/src/stories/Page.stories.js +0 -28
- package/src/stories/assets/accessibility.png +0 -0
- package/src/stories/assets/accessibility.svg +0 -1
- package/src/stories/assets/addon-library.png +0 -0
- package/src/stories/assets/assets.png +0 -0
- package/src/stories/assets/avif-test-image.avif +0 -0
- package/src/stories/assets/context.png +0 -0
- package/src/stories/assets/discord.svg +0 -1
- package/src/stories/assets/docs.png +0 -0
- package/src/stories/assets/figma-plugin.png +0 -0
- package/src/stories/assets/github.svg +0 -1
- package/src/stories/assets/share.png +0 -0
- package/src/stories/assets/styling.png +0 -0
- package/src/stories/assets/testing.png +0 -0
- package/src/stories/assets/theming.png +0 -0
- package/src/stories/assets/tutorials.svg +0 -1
- package/src/stories/assets/youtube.svg +0 -1
- package/src/stories/button.css +0 -30
- package/src/stories/header.css +0 -32
- package/src/stories/page.css +0 -68
- package/src/templates/index.js +0 -3
- package/src/templates/landing-page/2020/Footer.jsx +0 -59
- package/src/templates/landing-page/2020/Hero.jsx +0 -51
- package/src/templates/landing-page/2020/LandingPage.jsx +0 -180
- package/src/templates/landing-page/2020/LandingPage.stories.jsx +0 -190
- package/src/templates/landing-page/2020/index.js +0 -1
- package/src/templates/landing-page/index.js +0 -1
- package/src/templates/resume/Resume.jsx +0 -305
- package/src/templates/resume/Resume.stories.jsx +0 -237
- package/src/templates/resume/index.js +0 -2
- package/src/templates/resume/useResume.js +0 -85
- package/src/templates/theme-display/ThemeDisplay.jsx +0 -301
- package/src/templates/theme-display/ThemeDisplay.stories.jsx +0 -18
- package/src/templates/theme-display/index.js +0 -1
package/src/stories/page.css
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
.storybook-page {
|
|
2
|
-
margin: 0 auto;
|
|
3
|
-
padding: 48px 20px;
|
|
4
|
-
max-width: 600px;
|
|
5
|
-
color: #333;
|
|
6
|
-
font-size: 14px;
|
|
7
|
-
line-height: 24px;
|
|
8
|
-
font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
.storybook-page h2 {
|
|
12
|
-
display: inline-block;
|
|
13
|
-
vertical-align: top;
|
|
14
|
-
margin: 0 0 4px;
|
|
15
|
-
font-weight: 700;
|
|
16
|
-
font-size: 32px;
|
|
17
|
-
line-height: 1;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
.storybook-page p {
|
|
21
|
-
margin: 1em 0;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
.storybook-page a {
|
|
25
|
-
color: inherit;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
.storybook-page ul {
|
|
29
|
-
margin: 1em 0;
|
|
30
|
-
padding-left: 30px;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.storybook-page li {
|
|
34
|
-
margin-bottom: 8px;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
.storybook-page .tip {
|
|
38
|
-
display: inline-block;
|
|
39
|
-
vertical-align: top;
|
|
40
|
-
margin-right: 10px;
|
|
41
|
-
border-radius: 1em;
|
|
42
|
-
background: #e7fdd8;
|
|
43
|
-
padding: 4px 12px;
|
|
44
|
-
color: #357a14;
|
|
45
|
-
font-weight: 700;
|
|
46
|
-
font-size: 11px;
|
|
47
|
-
line-height: 12px;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
.storybook-page .tip-wrapper {
|
|
51
|
-
margin-top: 40px;
|
|
52
|
-
margin-bottom: 40px;
|
|
53
|
-
font-size: 13px;
|
|
54
|
-
line-height: 20px;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.storybook-page .tip-wrapper svg {
|
|
58
|
-
display: inline-block;
|
|
59
|
-
vertical-align: top;
|
|
60
|
-
margin-top: 3px;
|
|
61
|
-
margin-right: 4px;
|
|
62
|
-
width: 12px;
|
|
63
|
-
height: 12px;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
.storybook-page .tip-wrapper svg path {
|
|
67
|
-
fill: #1ea7fd;
|
|
68
|
-
}
|
package/src/templates/index.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { Title, Button, Text, View } from "@ossy/design-system"
|
|
3
|
-
|
|
4
|
-
export const Footer = ({
|
|
5
|
-
columns = [],
|
|
6
|
-
}) => {
|
|
7
|
-
return (
|
|
8
|
-
<View layout="row" placeContent="normal space-between" gap="xl" className="footer">
|
|
9
|
-
|
|
10
|
-
<style href="@ossy/design-system-extras/footer" precedence="high" >
|
|
11
|
-
{`
|
|
12
|
-
.footer {
|
|
13
|
-
padding: var(--space-s);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
.footer .title {
|
|
17
|
-
margin-bottom: var(--space-m);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
.footer .list {
|
|
21
|
-
padding: 0;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
.footer .list-item {
|
|
25
|
-
list-style: none;
|
|
26
|
-
}
|
|
27
|
-
`}
|
|
28
|
-
</style>
|
|
29
|
-
|
|
30
|
-
{
|
|
31
|
-
columns.map(column => (
|
|
32
|
-
<div style={{ maxWidth: `var(--max-width-${column.maxWidth}, 100%)` }}>
|
|
33
|
-
<Title as="h3" variant="tertiary" className="title" style={{ color: 'var(--color-primary)'}}>
|
|
34
|
-
{column.title}
|
|
35
|
-
</Title>
|
|
36
|
-
{
|
|
37
|
-
!!column.text && <Text style={{ color: 'var(--color-primary)'}}>{column.text}</Text>
|
|
38
|
-
}
|
|
39
|
-
{
|
|
40
|
-
!!column.list && (
|
|
41
|
-
<ul className="list" key={column.title}>
|
|
42
|
-
{
|
|
43
|
-
column.list.map(({ label, ...anchorProps }) => (
|
|
44
|
-
<li className="list-item" key={label}>
|
|
45
|
-
<Button variant="link" {...anchorProps} style={{ marginBottom: 'var(--space-m)' }}>
|
|
46
|
-
{label}
|
|
47
|
-
</Button>
|
|
48
|
-
</li>
|
|
49
|
-
))
|
|
50
|
-
}
|
|
51
|
-
</ul>
|
|
52
|
-
)
|
|
53
|
-
}
|
|
54
|
-
</div>
|
|
55
|
-
))
|
|
56
|
-
}
|
|
57
|
-
</View>
|
|
58
|
-
)
|
|
59
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { Title, Text, Button } from "@ossy/design-system"
|
|
3
|
-
|
|
4
|
-
export const Hero = ({
|
|
5
|
-
title,
|
|
6
|
-
titleMaxWidth = '800px',
|
|
7
|
-
text,
|
|
8
|
-
actions = [],
|
|
9
|
-
}) => (
|
|
10
|
-
<div data-component="hero">
|
|
11
|
-
|
|
12
|
-
<style href="@ossy/design-system-extras/hero" precedence="high">
|
|
13
|
-
{`
|
|
14
|
-
[data-component="hero"] {
|
|
15
|
-
display: flex;
|
|
16
|
-
flex-direction: column;
|
|
17
|
-
align-items: center;
|
|
18
|
-
justify-content: center;
|
|
19
|
-
text-align: center;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
@media (min-width: 820px) {
|
|
23
|
-
[data-component="hero"] {
|
|
24
|
-
/* min-height: 60vh; */
|
|
25
|
-
flex: 0 0 auto;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
`}
|
|
29
|
-
</style>
|
|
30
|
-
|
|
31
|
-
<Title
|
|
32
|
-
variant="display"
|
|
33
|
-
style={{ maxWidth: titleMaxWidth, marginBottom: 'var(--space-l)' }}
|
|
34
|
-
>
|
|
35
|
-
{title}
|
|
36
|
-
</Title>
|
|
37
|
-
|
|
38
|
-
<Text style={{ marginBottom: 'var(--space-l)' }}>
|
|
39
|
-
{text}
|
|
40
|
-
</Text>
|
|
41
|
-
|
|
42
|
-
<div style={{ display: 'flex', gap: 'var(--space-m)'}}>
|
|
43
|
-
{actions.map(({ label, ...props }) => (
|
|
44
|
-
<Button {...props} key={label}>
|
|
45
|
-
{label}
|
|
46
|
-
</Button>
|
|
47
|
-
))}
|
|
48
|
-
</div>
|
|
49
|
-
|
|
50
|
-
</div>
|
|
51
|
-
)
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import {
|
|
3
|
-
Title,
|
|
4
|
-
Text,
|
|
5
|
-
Image,
|
|
6
|
-
Stack,
|
|
7
|
-
Card,
|
|
8
|
-
Guide,
|
|
9
|
-
Button,
|
|
10
|
-
View
|
|
11
|
-
} from "@ossy/design-system"
|
|
12
|
-
import { Hero } from './Hero.jsx'
|
|
13
|
-
import { Footer } from './Footer.jsx'
|
|
14
|
-
|
|
15
|
-
export const LandingPage2020 = [
|
|
16
|
-
|
|
17
|
-
{
|
|
18
|
-
id: "about",
|
|
19
|
-
surface: 'decorated',
|
|
20
|
-
style: {
|
|
21
|
-
padding: 'var(--space-xxl) var(--space-m)'
|
|
22
|
-
},
|
|
23
|
-
render: ({ about, socialProof }) => (
|
|
24
|
-
<>
|
|
25
|
-
<View alignItems="stretch" justifyContent="center" style={{ marginBottom: 'var(--space-xl)'}}>
|
|
26
|
-
{
|
|
27
|
-
about.columns.map(({ name, role, imgSrc, text }) => (
|
|
28
|
-
<div key={name} style={{
|
|
29
|
-
display: 'flex',
|
|
30
|
-
flexDirection: 'column',
|
|
31
|
-
justifyContent: 'center'
|
|
32
|
-
}}>
|
|
33
|
-
<Image
|
|
34
|
-
key={name}
|
|
35
|
-
src={imgSrc}
|
|
36
|
-
style={{
|
|
37
|
-
borderRadius: '50%',
|
|
38
|
-
width: '100%',
|
|
39
|
-
maxWidth: '200px',
|
|
40
|
-
height: 'auto',
|
|
41
|
-
margin: '0 auto',
|
|
42
|
-
marginBottom: 'var(--space-l)'
|
|
43
|
-
}}
|
|
44
|
-
/>
|
|
45
|
-
|
|
46
|
-
<div style={{
|
|
47
|
-
display: 'flex',
|
|
48
|
-
flexDirection: 'column',
|
|
49
|
-
gap: 'var(--space-s)',
|
|
50
|
-
alignItems: 'center',
|
|
51
|
-
marginBottom: 'var(--space-l)'
|
|
52
|
-
}}>
|
|
53
|
-
<Title as="h1" variant="primary">{name}</Title>
|
|
54
|
-
<Title as="h2" variant="lead">{role}</Title>
|
|
55
|
-
</div>
|
|
56
|
-
|
|
57
|
-
<Text style={{ textAlign: 'center', maxWidth: '600px', margin: '0 auto' }}>
|
|
58
|
-
{text}
|
|
59
|
-
</Text>
|
|
60
|
-
</div>
|
|
61
|
-
))
|
|
62
|
-
}
|
|
63
|
-
</View>
|
|
64
|
-
|
|
65
|
-
<Text variant="small" style={{ marginBottom: 'var(--space-l)', textAlign: 'center' }}>
|
|
66
|
-
{socialProof.title}
|
|
67
|
-
</Text>
|
|
68
|
-
|
|
69
|
-
<View layout="row" justifyContent="space-between" gap="m">
|
|
70
|
-
|
|
71
|
-
{
|
|
72
|
-
socialProof.columns.map(({ title, logo }) => (
|
|
73
|
-
<div key={title} style={{
|
|
74
|
-
|
|
75
|
-
textAlign: 'center'
|
|
76
|
-
}}>
|
|
77
|
-
<Card>
|
|
78
|
-
<Image src={logo} style={{
|
|
79
|
-
height: '20px',
|
|
80
|
-
width: 'auto'
|
|
81
|
-
}} />
|
|
82
|
-
</Card>
|
|
83
|
-
</div>
|
|
84
|
-
))
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
</View>
|
|
88
|
-
</>
|
|
89
|
-
)
|
|
90
|
-
},
|
|
91
|
-
|
|
92
|
-
{
|
|
93
|
-
id: "hero",
|
|
94
|
-
surface: "primary",
|
|
95
|
-
style: {
|
|
96
|
-
padding: 'var(--space-xxl) var(--space-m) var(--space-xl)',
|
|
97
|
-
},
|
|
98
|
-
render: ({ hero }) => <Hero {...hero}/>
|
|
99
|
-
},
|
|
100
|
-
|
|
101
|
-
{
|
|
102
|
-
id: "services",
|
|
103
|
-
surface: "primary",
|
|
104
|
-
maxWidth: "large",
|
|
105
|
-
layout: "row",
|
|
106
|
-
placeContent: "stretch space-around",
|
|
107
|
-
gap: "xl",
|
|
108
|
-
style: {
|
|
109
|
-
borderBottom: '1px solid var(--separator-primary)',
|
|
110
|
-
padding: 'var(--space-xxl) var(--space-m)'
|
|
111
|
-
},
|
|
112
|
-
render: ({ services }) => (
|
|
113
|
-
<>
|
|
114
|
-
{
|
|
115
|
-
services.map(({ title, text }) => (
|
|
116
|
-
<div key={title} style={{ textAlign: 'center' }}>
|
|
117
|
-
<Title variant="tertiary" style={{ marginBottom: 'var(--space-m)' }}>
|
|
118
|
-
{title}
|
|
119
|
-
</Title>
|
|
120
|
-
<Text style={{ maxWidth: '600px' }}>
|
|
121
|
-
{text}
|
|
122
|
-
</Text>
|
|
123
|
-
</div>
|
|
124
|
-
))
|
|
125
|
-
}
|
|
126
|
-
</>
|
|
127
|
-
)
|
|
128
|
-
},
|
|
129
|
-
|
|
130
|
-
{
|
|
131
|
-
id: "projects",
|
|
132
|
-
surface: "primary",
|
|
133
|
-
style: {
|
|
134
|
-
padding: 'var(--space-xxl) var(--space-m) var(--space-xl)',
|
|
135
|
-
minHeight: '60vh'
|
|
136
|
-
},
|
|
137
|
-
render: ({ projects }) => (
|
|
138
|
-
<>
|
|
139
|
-
<Guide
|
|
140
|
-
title={projects.title}
|
|
141
|
-
titleVariant="display"
|
|
142
|
-
text={projects.text}
|
|
143
|
-
style={{ textAlign: 'left', maxWidth: '600px', marginBottom: 'var(--space-xl)' }}
|
|
144
|
-
/>
|
|
145
|
-
{projects.categories.map(({ title, text, links }) => (
|
|
146
|
-
<div style={{ marginBottom: 'var(--space-xl)'}}>
|
|
147
|
-
<Title title={title} variant="tertiary" style={{ marginBottom: 'var(--space-l)'}}>
|
|
148
|
-
{title}
|
|
149
|
-
</Title>
|
|
150
|
-
<Text>
|
|
151
|
-
{text}
|
|
152
|
-
</Text>
|
|
153
|
-
<Stack>
|
|
154
|
-
{
|
|
155
|
-
links.map(buttons => (
|
|
156
|
-
<Stack horizontal style={{ marginBottom: 'var(--space-m)' }}>
|
|
157
|
-
{
|
|
158
|
-
buttons.map(button => <Button {...button} variant="link" target="_blank" style={{ marginRight: 'var(--space-m)'}}/>)
|
|
159
|
-
}
|
|
160
|
-
</Stack>
|
|
161
|
-
))
|
|
162
|
-
}
|
|
163
|
-
</Stack>
|
|
164
|
-
</div>
|
|
165
|
-
))}
|
|
166
|
-
</>
|
|
167
|
-
)
|
|
168
|
-
},
|
|
169
|
-
|
|
170
|
-
{
|
|
171
|
-
id: "contact",
|
|
172
|
-
surface: 'accent',
|
|
173
|
-
style: {
|
|
174
|
-
padding: 'var(--space-xxl) var(--space-m)',
|
|
175
|
-
borderBottom: '1px solid var(--separator-primary)'
|
|
176
|
-
},
|
|
177
|
-
render: ({ contact }) => <Footer columns={contact.columns} />
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
]
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { Page } from "@ossy/design-system"
|
|
3
|
-
import { LandingPage2020 } from './LandingPage.jsx'
|
|
4
|
-
|
|
5
|
-
export default {
|
|
6
|
-
title: 'Design System Extras/Templates/Landing page/2020',
|
|
7
|
-
parameters: {
|
|
8
|
-
layout: 'fullscreen',
|
|
9
|
-
},
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const Story = props => <Page {...props}/>
|
|
13
|
-
|
|
14
|
-
export const Default = Story.bind({})
|
|
15
|
-
Default.args = {
|
|
16
|
-
sections: LandingPage2020,
|
|
17
|
-
hero: {
|
|
18
|
-
title: 'Angular och React expertis. Design i hjärtat.',
|
|
19
|
-
text: `
|
|
20
|
-
Med expertis inom React & Angular,
|
|
21
|
-
har jag en passion för att skapa webbapplikationer som inte bara är tekniskt avancerade,
|
|
22
|
-
utan också estetiskt tilltalande.
|
|
23
|
-
När min tekniska kunskap möter min kärlek till design,
|
|
24
|
-
skapar jag lösningar som verkligen lyfter ditt företags digitala närvaro.
|
|
25
|
-
`,
|
|
26
|
-
actions: [
|
|
27
|
-
{ label: 'Kontakt', href: '#contact' },
|
|
28
|
-
{ label: 'Online CV', variant: 'cta', href: '/sv/resume' }
|
|
29
|
-
]
|
|
30
|
-
},
|
|
31
|
-
|
|
32
|
-
socialProof: {
|
|
33
|
-
title: 'Litad på av',
|
|
34
|
-
columns: [
|
|
35
|
-
{
|
|
36
|
-
title: 'Mikael Schulz',
|
|
37
|
-
logo: 'https://d1yuixo7x29bj4.cloudfront.net/36zDqF0TKZZ5KkJdyg7NH/HFHn21DSCu2f1Gwwzr-xh.png'
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
title: 'tepit',
|
|
41
|
-
logo: 'https://d1yuixo7x29bj4.cloudfront.net/36zDqF0TKZZ5KkJdyg7NH/QdwAa6w1mBu8cC0x667Vw.png'
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
title: 'Plexus Sanitas',
|
|
45
|
-
logo: 'https://d1yuixo7x29bj4.cloudfront.net/36zDqF0TKZZ5KkJdyg7NH/Of3veKFzLTxAY4qYTmBuW.png'
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
title: 'OSSY',
|
|
49
|
-
logo: 'https://d1yuixo7x29bj4.cloudfront.net/36zDqF0TKZZ5KkJdyg7NH/PBFpT6d48OPG9kXzT49r7.png'
|
|
50
|
-
}
|
|
51
|
-
]
|
|
52
|
-
},
|
|
53
|
-
|
|
54
|
-
services: [
|
|
55
|
-
{
|
|
56
|
-
title: 'Apputveckling med Angular & React',
|
|
57
|
-
text: `
|
|
58
|
-
Oavsett om du siktar på en responsiv hemsida eller komplex webbapplication,
|
|
59
|
-
kan jag med min expertis inom Angular och React leverera lösningar
|
|
60
|
-
som är kraftfulla, skalbara, användarvänliga, och estetiskt tilltalande.
|
|
61
|
-
Min erfarenhet täcker allt från initial konceptualisering till lansering och underhåll.
|
|
62
|
-
`
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
title: 'Designsystem & Komponentbibliotek',
|
|
66
|
-
text: `
|
|
67
|
-
I den digitala världen är igenkännbarhet nyckeln till en suverän användarupplevelse.
|
|
68
|
-
Jag kan hjälpa dig med att implementera och integrera designsystem som säkerställer
|
|
69
|
-
en enhetlig och igenkännbar stil över alla dina digitala gränssnitt.
|
|
70
|
-
Tillsammans bygger vi komponentbibliotek som gör det snabbt och enkelt att skapa nya sidor och funktioner,
|
|
71
|
-
samtidigt som vi behåller den höga designstandarden.
|
|
72
|
-
Låt oss tillsammans skapa digitala upplevelser som dina användare kommer att älska.
|
|
73
|
-
`
|
|
74
|
-
}
|
|
75
|
-
],
|
|
76
|
-
|
|
77
|
-
projects: {
|
|
78
|
-
title: 'Mina projekt',
|
|
79
|
-
text:`
|
|
80
|
-
Under min karriär har jag haft förmånen att arbeta med en rad professionella projekt
|
|
81
|
-
som har bidragit till att formge min expertis inom systemutveckling.
|
|
82
|
-
Många av dessa projekt är av konfidentiell natur eller bundna av affärsavtal,
|
|
83
|
-
och kan därför inte visas offentligt här. Men utanför den professionella
|
|
84
|
-
sfären brinner jag för teknik och skapande, vilket reflekteras i de många hobbyprojekt
|
|
85
|
-
jag tar mig an på min fritid.
|
|
86
|
-
Nedan finner du ett urval av några professionella project jag kan visa
|
|
87
|
-
samt många personliga skapelser som jag gärna delar med mig av.
|
|
88
|
-
`,
|
|
89
|
-
categories: [
|
|
90
|
-
{
|
|
91
|
-
title: 'Hemsidor och designsystem',
|
|
92
|
-
links: [
|
|
93
|
-
[
|
|
94
|
-
{
|
|
95
|
-
label: 'Plexus Sanitas',
|
|
96
|
-
href: 'https://www.plexus-sanitas.com/'
|
|
97
|
-
}
|
|
98
|
-
],
|
|
99
|
-
[
|
|
100
|
-
{
|
|
101
|
-
label: 'Mikael Shulz',
|
|
102
|
-
href: 'https://www.mikaelschulz.com/'
|
|
103
|
-
}
|
|
104
|
-
],
|
|
105
|
-
// [
|
|
106
|
-
// {
|
|
107
|
-
// label: 'Tepit',
|
|
108
|
-
// href: 'https://tepit.ossy.se'
|
|
109
|
-
// }
|
|
110
|
-
// ],
|
|
111
|
-
[
|
|
112
|
-
{
|
|
113
|
-
label: 'Ossy',
|
|
114
|
-
href: 'https://ossy.se/'
|
|
115
|
-
}
|
|
116
|
-
]
|
|
117
|
-
]
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
title: 'Applicationsutveckling',
|
|
121
|
-
links: [
|
|
122
|
-
[
|
|
123
|
-
{
|
|
124
|
-
label: 'Content management system',
|
|
125
|
-
href: 'https://cms.ossy.se'
|
|
126
|
-
}
|
|
127
|
-
],
|
|
128
|
-
[
|
|
129
|
-
{
|
|
130
|
-
label: '@ossy/cms-client-react',
|
|
131
|
-
href: 'https://www.npmjs.com/package/@ossy/cms-client-react'
|
|
132
|
-
}
|
|
133
|
-
],
|
|
134
|
-
[
|
|
135
|
-
{
|
|
136
|
-
label: '@ossy/cli',
|
|
137
|
-
href: 'https://www.npmjs.com/package/@ossy/cli'
|
|
138
|
-
}
|
|
139
|
-
],
|
|
140
|
-
[
|
|
141
|
-
{
|
|
142
|
-
label: '@ossy/deployment-tools',
|
|
143
|
-
href: 'https://www.npmjs.com/package/@ossy/deployment-tools'
|
|
144
|
-
}
|
|
145
|
-
]
|
|
146
|
-
]
|
|
147
|
-
}
|
|
148
|
-
]
|
|
149
|
-
},
|
|
150
|
-
|
|
151
|
-
about: {
|
|
152
|
-
columns: [
|
|
153
|
-
{
|
|
154
|
-
name: 'Oskars Sylwan',
|
|
155
|
-
role: 'Systemutvecklare',
|
|
156
|
-
imgSrc: 'https://d1yuixo7x29bj4.cloudfront.net/36zDqF0TKZZ5KkJdyg7NH/j9SeL8EG7f8vEiJCPPgZa.png',
|
|
157
|
-
text: `
|
|
158
|
-
Frontendutvecklare med fokus på att bygga administrativa system och dashboards i moderna JavaScript ramverk.
|
|
159
|
-
Erfarenhet finns både inom Angular och React och kommer från större bolag, myndigheter, och startups.
|
|
160
|
-
Jag är van vid att ta ansvar för frontenddelar i utvecklingsprocessen vilket inkluderar planering,
|
|
161
|
-
arkitektur, utveckling, sätta riktlinjer, lära ut, och onboarda nya utvecklare.
|
|
162
|
-
`
|
|
163
|
-
}
|
|
164
|
-
]
|
|
165
|
-
},
|
|
166
|
-
|
|
167
|
-
contact: {
|
|
168
|
-
columns: [
|
|
169
|
-
{
|
|
170
|
-
title: 'Kontakta mig',
|
|
171
|
-
maxWidth: 's',
|
|
172
|
-
text: `
|
|
173
|
-
Jag ser fram emot att höra från dig och diskutera hur vi kan samarbeta på ditt nästa projekt.
|
|
174
|
-
Även om jag är tillgänglig för samtal mellan kl. 09:00 och 16:00 på vardagar,
|
|
175
|
-
finner många att det enklaste sättet att nå mig är genom att skicka ett meddelande på LinkedIn.
|
|
176
|
-
Tveka inte att ta kontakt!
|
|
177
|
-
`
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
list: [
|
|
181
|
-
{ label: 'oskarssylwan.com', href: 'https://oskarssylwan.com/' },
|
|
182
|
-
{ label: 'LinkedIn', href: 'www.linkedin.com/in/oskarssylwan' },
|
|
183
|
-
{ label: 'oskars.sylwan@ossy.se', href: 'mailto:oskars.sylwan@ossy.se' },
|
|
184
|
-
{ label: '+46 73 097 15 98' }
|
|
185
|
-
]
|
|
186
|
-
}
|
|
187
|
-
]
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './LandingPage.jsx'
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './2020'
|