1diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
2new file mode 100644
3index 0000000000000000000000000000000000000000..d7c20bfad78c574f653e2492f399ce5ba071acfb
4--- /dev/null
5+++ b/.gitlab-ci.yml
6@@ -0,0 +1,14 @@
7+pages:
8+ image:
9+ name: pandoc/alpine
10+ entrypoint:
11+ - ""
12+ stage: build
13+ script:
14+ - mkdir public
15+ - pandoc -s --include-in-header=docs/bamboo.min.css -s README.md -o public/index.html
16+ artifacts:
17+ paths:
18+ - public
19+ only:
20+ - main
21diff --git a/README.md b/README.md
22new file mode 100644
23index 0000000000000000000000000000000000000000..f13190d3875f7a9d4ff6b378279830e17e6524f4
24--- /dev/null
25+++ b/README.md
26@@ -0,0 +1,55 @@
27+# Nerdcast filtro para podcast
28+
29+Um simples filtro para o Nerdcast. Hoje em dia o _feed_ do _podcast_ e bem
30+poluído, vários temas, quadros e programas. Esse projeto e um filtro simples
31+para tirar alguns programas do _feed_ ou mesmo dividi-los em _feeds_
32+diferentes. Os seguintes seguimentos são suportados:
33+
34+- `nerdcast`
35+- `empreendedor`
36+- `mamicas`
37+- `english`
38+- `nerdcash`
39+- `bunker`
40+- `tech`
41+- `genera`
42+
43+## Para usuarios
44+
45+Por padrão ele só pega a série principal lançada toda sexta. Para usar basta
46+adicionar a seguinte URL no seu agregador:
47+
48+```
49+https://jnfilter.herokuapp.com/
50+```
51+
52+Mas caso você queira, você pode escolher mais alguns seguimentos. Por exemplo,
53+se voce quer ver somente a série principal e canecas de mamicas você
54+adicionaria o seguinte URL no seu agregador:
55+
56+```
57+https://jnfilter.herokuapp.com/?q=mamicas,nerdcast
58+```
59+
60+Quer nerdcast e nerdcash?
61+
62+```
63+https://jnfilter.herokuapp.com/?q=nerdcash,nerdcast
64+```
65+
66+E por aí vai, seguindo os seguimentos listados acima.
67+
68+## Para programadores
69+
70+E um projeto simples feito em cima do FastApi. Ele vai pegar o _feed_ e
71+filtrar os itens do _feed_ do podcast. Não tem cache nem nada sendo armazenado,
72+todo processamento e feito a partir do feed para cada requisição.
73+
74+Para rodar basta instalar os requirements e rodar o seguinte código:
75+
76+```shell
77+uvicorn main:app --host=0.0.0.0
78+```
79+
80+E você já pode apontar o seu agregador favorito para sua maquina.
81+
82diff --git a/docs/bamboo.min.css b/docs/bamboo.min.css
83new file mode 100644
84index 0000000000000000000000000000000000000000..5289de7f3c2965e1de6f5866adf9756c92f4c3f5
85--- /dev/null
86+++ b/docs/bamboo.min.css
87@@ -0,0 +1,369 @@
88+<style type="text/css">
89+:root {
90+ --b-font-main: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
91+ --b-font-mono: Consolas, Monaco, monospace;
92+ --b-txt: #2e3440;
93+ --b-bg-1: #fff;
94+ --b-bg-2: #eceff4;
95+ --b-line: #eceff4;
96+ --b-link: #bf616a;
97+ --b-btn-bg: #242933;
98+ --b-btn-txt: #fff;
99+ --b-focus: #88c0d0
100+}
101+
102+@media (prefers-color-scheme: dark) {
103+ :root {
104+ --b-txt: #eceff4;
105+ --b-bg-1: #2e3440;
106+ --b-bg-2: #3b4252;
107+ --b-line: #3b4252
108+ }
109+}
110+
111+*, :after, :before {
112+ box-sizing: border-box
113+}
114+
115+html:focus-within {
116+ scroll-behavior: smooth
117+}
118+
119+body {
120+ max-width: 70ch;
121+ padding: 0 1rem;
122+ margin: auto;
123+ background: var(--b-bg-1);
124+ font-family: var(--b-font-main);
125+ text-rendering: optimizeSpeed;
126+ line-height: 1.5;
127+ color: var(--b-txt);
128+ -moz-tab-size: 4;
129+ tab-size: 4;
130+ word-break: break-word;
131+ -webkit-tap-highlight-color: transparent;
132+ -webkit-text-size-adjust: 100%
133+}
134+
135+address, audio, blockquote, dd, details, dl, fieldset, figure, h1, h2, h3, h4, h5, h6, hr, iframe, ol, p, pre, table, ul, video {
136+ margin: 0 0 1.5rem
137+}
138+
139+h1, h2, h3, h4, h5, h6 {
140+ line-height: 1.25;
141+ margin-top: 2rem
142+}
143+
144+h1 {
145+ font-size: 2rem
146+}
147+
148+h2 {
149+ font-size: 1.5rem
150+}
151+
152+h3 {
153+ font-size: 1.25rem
154+}
155+
156+h4 {
157+ font-size: 1rem
158+}
159+
160+h5 {
161+ font-size: .875rem
162+}
163+
164+h6 {
165+ font-size: .75rem
166+}
167+
168+a {
169+ color: var(--b-link);
170+ text-decoration: none
171+}
172+
173+a:hover {
174+ text-decoration: underline
175+}
176+
177+img, svg, video {
178+ height: auto
179+}
180+
181+embed, iframe, img, object, svg, video {
182+ max-width: 100%
183+}
184+
185+iframe {
186+ border-style: none
187+}
188+
189+abbr[title] {
190+ text-decoration: underline;
191+ text-decoration: underline dotted
192+}
193+
194+blockquote {
195+ margin-left: 0;
196+ padding: .5rem 0 .5rem 1.5rem;
197+ border-left: .25rem solid var(--b-txt)
198+}
199+
200+blockquote > :last-child {
201+ margin-bottom: 0
202+}
203+
204+small {
205+ font-size: .875rem
206+}
207+
208+sub, sup {
209+ font-size: .75em;
210+ line-height: 0;
211+ position: relative;
212+ vertical-align: baseline
213+}
214+
215+sub {
216+ bottom: -.25em
217+}
218+
219+sup {
220+ top: -.5em
221+}
222+
223+hr {
224+ height: 0;
225+ overflow: visible;
226+ border: 0;
227+ border-bottom: 1px solid var(--b-line)
228+}
229+
230+code, kbd, pre, samp, tt, var {
231+ background: var(--b-bg-2);
232+ border-radius: .25rem;
233+ padding: .125rem .25rem;
234+ font-family: var(--b-font-mono);
235+ font-size: .875rem
236+}
237+
238+pre {
239+ padding: 1rem;
240+ border-radius: 0;
241+ overflow: auto;
242+ white-space: pre
243+}
244+
245+pre code {
246+ padding: 0
247+}
248+
249+details {
250+ display: block;
251+ padding: .5rem 1rem;
252+ background: var(--b-bg-2);
253+ border: 1px solid var(--b-line);
254+ border-radius: .25rem
255+}
256+
257+details > :last-child {
258+ margin-bottom: 0
259+}
260+
261+details[open] > summary {
262+ margin-bottom: 1.5rem
263+}
264+
265+summary {
266+ display: list-item;
267+ cursor: pointer;
268+ font-weight: 700
269+}
270+
271+summary:focus {
272+ box-shadow: none
273+}
274+
275+table {
276+ border-collapse: collapse;
277+ width: 100%;
278+ text-indent: 0
279+}
280+
281+table caption {
282+ margin-bottom: .5rem
283+}
284+
285+tr {
286+ border-bottom: 1px solid var(--b-line)
287+}
288+
289+td, th {
290+ padding: .5rem 0
291+}
292+
293+th {
294+ text-align: left
295+}
296+
297+dd, ol, ul {
298+ padding-left: 2rem
299+}
300+
301+li > ol, li > ul {
302+ margin-bottom: 0
303+}
304+
305+fieldset {
306+ padding: .5rem .75rem;
307+ border: 1px solid var(--b-line);
308+ border-radius: .25rem
309+}
310+
311+legend {
312+ padding: 0 .25rem
313+}
314+
315+button, input, select, textarea {
316+ margin: 0;
317+ padding: .5rem .75rem;
318+ max-width: 100%;
319+ background: var(--b-bg-2);
320+ border: 0;
321+ border-radius: .25rem;
322+ font: inherit;
323+ line-height: 1.125;
324+ color: var(--b-txt)
325+}
326+
327+input:not([size]):not([type=button i]):not([type=submit i]):not([type=reset i]):not([type=checkbox i]):not([type=radio i]), select {
328+ width: 100%
329+}
330+
331+[type=color i] {
332+ min-height: 2.125rem
333+}
334+
335+select:not([multiple]):not([size]) {
336+ padding-right: 1.5rem;
337+ background-repeat: no-repeat;
338+ background-position: right .5rem center;
339+ -moz-appearance: none;
340+ -webkit-appearance: none;
341+ appearance: none
342+}
343+
344+textarea {
345+ width: 100%;
346+ resize: vertical
347+}
348+
349+textarea:not([rows]) {
350+ height: 8rem
351+}
352+
353+[type=button i], [type=reset i], [type=submit i], button {
354+ -webkit-appearance: button;
355+ display: inline-block;
356+ text-align: center;
357+ white-space: nowrap;
358+ background: var(--b-btn-bg);
359+ color: var(--b-btn-txt);
360+ border: 0;
361+ cursor: pointer;
362+ transition: opacity .25s
363+}
364+
365+[type=button i]:hover, [type=reset i]:hover, [type=submit i]:hover, button:hover {
366+ opacity: .75
367+}
368+
369+[type=button i][disabled], [type=reset i][disabled], [type=submit i][disabled], button[disabled] {
370+ opacity: .5
371+}
372+
373+progress {
374+ vertical-align: middle
375+}
376+
377+[type=search i] {
378+ -webkit-appearance: textfield;
379+ outline-offset: -2px
380+}
381+
382+::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
383+ height: auto
384+}
385+
386+::-webkit-input-placeholder {
387+ color: inherit;
388+ opacity: .5
389+}
390+
391+::-webkit-search-decoration {
392+ -webkit-appearance: none
393+}
394+
395+::-webkit-file-upload-button {
396+ -webkit-appearance: button;
397+ font: inherit
398+}
399+
400+::-moz-focus-inner {
401+ border-style: none;
402+ padding: 0
403+}
404+
405+:-moz-focusring {
406+ outline: 1px dotted ButtonText
407+}
408+
409+:-moz-ui-invalid {
410+ box-shadow: none
411+}
412+
413+[aria-busy=true i] {
414+ cursor: progress
415+}
416+
417+[aria-controls] {
418+ cursor: pointer
419+}
420+
421+[aria-disabled=true i], [disabled] {
422+ cursor: not-allowed
423+}
424+
425+:focus, details:focus-within {
426+ outline: none;
427+ box-shadow: 0 0 0 2px var(--b-focus)
428+}
429+
430+@media (prefers-reduced-motion: reduce) {
431+ html:focus-within {
432+ scroll-behavior: auto
433+ }
434+
435+ *, :after, :before {
436+ animation-delay: -1ms !important;
437+ animation-duration: 1ms !important;
438+ animation-iteration-count: 1 !important;
439+ background-attachment: scroll !important;
440+ scroll-behavior: auto !important;
441+ transition-delay: 0 !important;
442+ transition-duration: 0 !important
443+ }
444+}
445+
446+select:not([multiple]):not([size]) {
447+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%232e3440'%3E%3Cpath d='M5 6l5 5 5-5 2 1-7 7-7-7 2-1z'/%3E%3C/svg%3E")
448+}
449+
450+@media (prefers-color-scheme: dark) {
451+ select:not([multiple]):not([size]) {
452+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='16' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg' fill='%23eceff4'%3E%3Cpath d='M5 6l5 5 5-5 2 1-7 7-7-7 2-1z'/%3E%3C/svg%3E")
453+ }
454+}
455+
456+</style >
457\ No newline at end of file