diff --git a/app.py b/app.py index a549545..b727966 100644 --- a/app.py +++ b/app.py @@ -15,7 +15,7 @@ class WikiApp(Flask): # Define routes # self.route('/', methods=['GET'])(self.homepage) - self.route('/', methods=['GET'])(self.homepage_new) + self.route('/', methods=['GET'])(self.home) self.route('/data', methods=['GET'])(self.data_int) self.route('/newsletter/', methods=['GET'])(self.generate_newsletter) self.route('/publications', methods=['GET'])(self.fetch_publications) @@ -23,6 +23,21 @@ class WikiApp(Flask): self.route('/', methods=['GET'])(self.page_content) self.route('/favicon.ico')(self.favicon) self.route('/archive/', methods=['GET'])(self.get_collection) + + # Return Homepage + def home(self): + pages = ['Homepage'] + homepage_content = '' + for page in pages: + # Make a request to MediaWiki API to get content of a specific page + response = requests.get(self.MEDIAWIKI_BASE_URL + self.BASE_API, params={'action': 'parse', 'page': page, 'format': 'json'}) + data = response.json() + # Extract page title and content + page_content = data['parse']['text']['*'] + page_content = self.fix_html(page_content) + homepage_content += page_content + + return render_template('index.html', title=pages[0], cont=homepage_content) def data_int(self): return render_template('data.html') @@ -299,7 +314,8 @@ class WikiApp(Flask): page_title = data['parse']['title'] page_content = data['parse']['text']['*'] page_content = self.fix_html(page_content) - return render_template('article.html', nav_elements=self.get_nav_menu(), title=page_title, content=page_content) + return render_template('index.html', title=page_title, cont=page_content) + def fetch_page(self, title): # Make a request to MediaWiki API to get content of a specific page @@ -372,22 +388,33 @@ class WikiApp(Flask): file_link.unwrap() soup = self.remove_thumbnail_img(soup) - # Locate the table and the comment + + # Locate the table and store it in an object table = soup.find('table') + # Remove inline styles by deleting the 'style' attribute if table and 'style' in table.attrs: del table['style'] - # Add the class 'table-cont' to the table + # Add the class 'table-cont' to the table (if not already removed) if table: table['class'] = table.get('class', []) + ['table-cont'] + comments = soup.find_all(string=lambda text: isinstance(text, Comment)) comment = comments[-1] if comments else None # Insert the table before the comment if comment and table is not None: comment.insert_before(table.extract()) - + + table_html = str(table) if table else None # Store the table HTML + + # Remove the table from the main HTML + if table: + table.decompose() + + + # Return the modified HTML return soup.prettify() def remove_thumbnail_img(self, soup): diff --git a/static/assets/styles.css b/static/assets/styles.css index 6fbd52a..91a752b 100644 --- a/static/assets/styles.css +++ b/static/assets/styles.css @@ -1,671 +1,145 @@ -@import url('https://fonts.googleapis.com/css2?family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap'); -@import url('https://fonts.googleapis.com/css2?family=Source+Sans+3:ital,wght@0,200..900;1,200..900&display=swap'); - -/* styles.css */ -body { - font-family: "Source Sans 3", sans-serif; - background-color: white; - color: black; - margin: auto; - padding: 0px; - font-family: "Space Mono", monospace; - overflow: hidden; - height: 100vh; -} - -.table-cont { - overflow-wrap: anywhere; -} - -.main-cont { - display: flex; - flex-direction: column; - width: 100%; - height: 100%; -} - -.header-title { - font-size: 40px; - display: flex; - background-color: white; - width: fit-content; - height: 100px; - padding-left: 40px; - padding-right: 40px; - align-items: center; -} - -.header-logo { - height: 100px; - max-width: 500px; - padding-left: 40px; - padding-right: 40px; - align-self: center; +html { + height: 100%; + width: 100%; } -.header-logo img{ - height: 100%; - width: 100%; +/* Reset some default styles */ +body, h1, h2, h3, p, ul, li, a { + margin: 0; + padding: 0; + box-sizing: border-box; } -.header-title a { - text-decoration: none; - color: black; -} - -.header-summary { - font-size: 15px; - font-style: italic; - padding-left: 20px; -} - -.nav-cont { - display: flex; - flex-direction: row; - width: 100%; - height: 100px; - gap: 0px; - /* margin-bottom: 10px; */ - /* position: fixed; */ - z-index: 100; -} - -.nav-element-cont { - display: flex; - flex-direction: row; - gap: 20px; - text-transform: lowercase; - font-size: 25px; - width: 100%; - background-color: black; - height: 100px; - padding-left: 20px; - align-items: center; -} - -.nav-element-cont a{ - text-decoration: none; - color: white; -} - -.nav-element { - display: flex; - flex-direction: row; - gap: 20px; -} - -.line { - background-color: black; - width: 100%; - height: 1px; - padding: 0; - margin: 0; - margin-bottom: 20px; -} - -.spinning-star { - transform-origin: center; /* Set the transform origin to the center */ - animation: spin 5s linear infinite; /* Apply the spin animation */ - color: red; -} - -.content { - width: 100%; - display: flex; - height: calc(100% - 100px); - /* position: fixed; */ -} - -.content-cont { - overflow: scroll; - overflow-x: hidden; - height: calc(100vh - 100px); - margin-left: 40px; - width: 100%; - /* margin-top: 100px; */ - /* margin-top: 100px; */ - /* margin-bottom: 100px; */ - /* margin-right: 40px; */ -} - -.article-cont { - width: 60%; - display: flex; - flex-direction: column; - gap: 20px; - margin-bottom: 20px; -} - -.article-cont big{ - font-family: 'Space Mono', monospace; -} - -.article-cont p { - font-family: "Source Sans 3", sans-serif; - font-size: 20px; - line-height: 30px; - margin-top: 0; -} - -.content-cont h1{ - font-size: 60px; - text-decoration: underline; - margin-bottom: 5px; -} - -.content-cont h2{ - font-size: 30px; - text-decoration: none; +/* General body styling */ +body { + font-family: "Inter", serif; + font-optical-sizing: auto; + font-style: normal; + line-height: 1.6; + color: #333; + background-color: #f9f9f9; + padding: 0px; + height: 100vh; + width: 100vw; + overflow: hidden; } -.content-cont h3{ - font-size: 25px; - text-decoration: none ; +#main-container { + height: 100%; + width: 100%; + display: flex; + flex-direction: row; } -.content-cont h4{ - font-size: 20px; - +/* index */ +#index-container { + display: flex; + flex: 0 0 35%; + flex-direction: column; + width: 100%; + padding-top: 20px; + padding-bottom: 20px; + gap: 40px; + overflow-y: scroll; + overflow-x: hidden; } -/* .content-cont p { - font-size: 17.5px; - line-height: 30px; -} */ - -.content-cont .article-cont a { - color: red; - text-decoration: none; - font-family: 'Space Mono', monospace; - font-size: 17.5px; +#index-container::-webkit-scrollbar { + display: none; } -.content-cont .opp-cont p a { - color: red; - text-decoration: none; +#index-header { + text-align: center; + vertical-align: middle; + padding-left: 60px; + padding-right: 60px; } -.content-cont .event-cont p a { - color: red; - text-decoration: none; +#index-content { + padding-left: 60px; + padding-right: 60px; } -.content-cont ul { - font-size: 20px; - border-style: none; +#index-links { + padding-left: 60px; + padding-right: 60px; } -.content-cont li a{ - border-style: none; - line-height: 40px; +#index-link-list { + display: flex; + flex-direction: row; + flex-wrap: wrap; + gap: 20px; } -.content-cont img{ - height: 100%; - width: auto; - max-width: 900px; - border: black; - border-style: dashed; - transition: transform 0.3s ease-in-out; +#content-container { + display: flex; + flex-direction: column; + flex-grow: 1; + width: 100%; + padding: 40px; + padding-top: 20px; + gap: 40px; + overflow-y: scroll; + overflow-x: hidden; } -.content-cont img:hover { - animation: rotate 1s steps(2) forwards infinite; +#content-title { + text-decoration: underline; } - -/* .content-cont::-webkit-scrollbar { - display: none; -} */ - -.content-header { - /* padding-top: 160px; */ +#content-body { + display: flex; + flex-direction: column; + gap: 20px; } -.section-cont { - width: 100vw; - height: calc(100vh - 100px); - display: flex; - flex-direction: row; - justify-content: space-around; -} -.collection-cont { - width: 100% ; - height: 100vh; - display: flex; - flex-direction: row; - justify-content: space-evenly; - align-content: baseline; - flex-wrap: wrap; - gap:60px; +#line-divider { + width: 2px; /* Thickness of the divider */ + background-color: black; /* Color of the line */ } -.collection-title { - border: 2px; - border-radius: 20px; - border-style: solid; - border-color: black; - padding: 10px; -} +/* + classes +*/ -.collection-element { - display: flex; - flex-direction: column; - align-items: center; - row-gap: 20px; +.title { + font-size: 60px; + font-weight: bold; + text-transform: uppercase; } -.collection-header{ - font-size: 20px; - margin-top: 40px; +p { + font-size: 20px; + font-weight: normal; } -.content-cont .collection-cont a { - text-decoration: underline; +.button-link { + display: inline-block; + padding: 15px 30px; + background-color: #D9D9D9; /* Green background */ color: black; -} - -.collection-cont .section-img{ - width: 100%; - padding-left: 0px; - margin-bottom: 0px; -} - -.collection-cont .section-img img{ - width: 100%; - height: auto; - max-width: 200px; - object-fit: contain; - border-radius: 0px; - border: black; - border-style: dashed; - transition: transform 0.3s ease-in-out; -} - - -.section { - width: calc(100% / 3); /* Each div takes up one-third of the container */ - display: flex; - flex-direction: column; - gap: 10px; - height: 100%; - z-index: 50; - overflow: scroll; - -ms-overflow-style: none; /* IE and Edge */ - scrollbar-width: none; /* Firefox */ -} - - -.section-group { - -} - -.section-object { - display: flex; - flex-direction: column; - gap: 10px; -} - -.section-element { - text-transform: uppercase; - font-size: 20px; - -} - -.section-element a { - text-decoration: underline; - color: red; -} - -.section-img img{ - width: 100%; - height: 400px; - object-fit: cover; - border-radius: 0px; - border: black; - border-style: dashed; - transition: transform 0.3s ease-in-out; -} - -.section-img:hover img { - animation: rotate 1s steps(2) forwards infinite; - } - -.section-img { - width: 75%; - padding-left: 0px; - padding-top: 10px; -} - -.section-date { - padding-left: 0px; -} - -.section-title { - display: flex; - margin-bottom: 40px; - padding-top: 80px; - align-items: center; -} - -.section-header{ - text-decoration: none; -} - -.footer { - position: absolute; - right: 0px; - display: none; - top: 25px; - z-index: 500; -} - -.foot { - height: 200px; - width: auto; -} - -/* Newsletter Styling*/ -.event-cont { - width: 60%; - font-size: 17.5px; -} - -.event { - margin-bottom: 10px; - display: block; -} - -.opp { - margin-bottom: 10px; - display: block; -} - -.list-events { - display: flex; - flex-direction: column; - gap: 10px; -} - -.list-opp { - display: flex; - flex-direction: column; - gap: 10px; -} - -.opp-cont{ - width: 60%; - font-size: 17.5px; - margin-bottom: 25px; -} - -.opp a { - color: black; - text-decoration: none; -} - -.opp-link { - color: red; - text-decoration: none; -} - -.event a { - color: black; - text-decoration: none; -} - -.event-link { - color: red; - text-decoration: none; -} - -.event-text { - font-family: "Source Sans 3", sans-serif; - font-size: 20px; - line-height: 30px; -} - -.opp-text { - font-family: "Source Sans 3", sans-serif; - font-size: 20px; - line-height: 30px; -} - -.pub-section { - display: flex; - gap: 20px; - flex-direction: column; - width: 60%; -} - -.pub-section-cont { - display: flex; - flex-direction: column; - padding: 40px; - padding-top: 0px; - gap: 20px; - overflow-y: scroll; - width: 100%; -} - -.pub-section-cont p{ - font-family: "Source Sans 3", sans-serif; + text-decoration: none; + border-radius: 30px; font-size: 20px; - line-height: 30px; - margin-top: 0; + font-weight: normal; + text-align: center; + text-transform: lowercase; } -.pub-section-cont h1 { - font-size: 60px; - text-decoration: underline; - margin-bottom: 5px; +.disable-scrollbar{ + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ } -#subscribe-button { - position: absolute; - bottom: 50px; - right:50px; - font-size: 40px; - text-transform: uppercase; - border: 1px solid red; - padding: 20px; - border-radius: 30px; - cursor: pointer; - background-color: black; - color: white; +.astr-line { + text-align: center; + font-size: 48px; } -.link-blank { - text-decoration: none; - color: black; +.mw-parser-output { + display: flex; + flex-direction: column; + gap: 20px; } -/* hr { - border: 0; - border-top: thin solid #243588; - clear:both; - display:block; - width: 100%; - background-color:#000000; - height: 1px; -} */ - - - - - - -/* Keyframes for the spin animation */ -@keyframes spin { - 0% { transform: rotate(0deg); } /* Initial rotation */ - 100% { transform: rotate(360deg); } /* Final rotation */ -} - -@keyframes rotate { - 0% { - transform: rotate(0deg) scaleX(100%); - } - 25% { - transform: rotate(2deg) scaleX(95%); - } - 50% { - transform: rotate(0deg) scaleX(100%); - } - 75% { - transform: rotate(-2deg) scaleX(95%); - } - 100% { - transform: rotate(0deg) scaleX(100%); - } - } - - /* Mobile */ - @media screen and (max-width: 1024px){ - .section-img img{ - height: 200px; - } - - .pub-section-cont { - padding: 0; - padding-right: 10px; - padding-bottom: 20px; - margin-left: 20px; - } - - .pub-section-cont p { - font-size: 15px; - } - - .pub-section-cont h1 { - font-size: 40px; - } - - .pub-section { - width: 100%; - } - - .content-cont .article-cont a { - font-size: 14px; - } - - #subscribe-button { - font-size: 20px; - bottom: 10px; - right: 10px; - padding: 10px; - background-color: black; - color: white; - } - - .nav-cont { - flex-direction: column; - } - - .nav-element-cont { - overflow-x: scroll; - overflow-y: hidden; - width: auto; - padding-left: 20px; - } - - .nav-element-cont::-webkit-scrollbar { - display: none; - - } - - .header-title { - width: 100%; - justify-content: center; - padding-left: 0; - padding-right: 0; - } - - .section-cont { - flex-direction: column; - height: auto; - } - - .section { - width: 100%; - overflow-x: scroll; - /* height: calc(50vh - 50px); */ - } - - .section-title { - padding-top: 40px; - } - - .section-group { - padding-bottom: 0px; - display: flex; - flex-direction: row; - } - - .section-object { - padding-bottom: 0px; - } - - .article-cont { - width: 100%; - } - - .content-cont { - padding-right: 40px; - } - - .event-cont { - width: 100%; - font-size: 15px; - } - - .opp-cont { - width: 100%; - font-size: 15px; - } - - .content-cont img { - height: auto; - width: 95%; - } - - .content-cont h1 { - font-size: 40px; - } - - .content-cont h2 { - font-size: 20px; - } - - .article-cont p { - font-size: 15px; - } - - .main-cont { - height: 100vh; - } - - .content { - height: 100vh; - overflow-y: scroll; - overflow-x: hidden; - } - - .content-cont h4 { - font-size: 17.5px; - } - - .opp-text { - font-size: 15px; - } - - .header-logo { - display: flex; - } - - @media screen and (max-width: 640px){ - .content-cont { - padding-right: 10px; - margin-left: 20px; - } - } -} \ No newline at end of file diff --git a/templates/_base.html b/templates/_base.html new file mode 100644 index 0000000..deac405 --- /dev/null +++ b/templates/_base.html @@ -0,0 +1,15 @@ + + + + + + {% block title %}CONCEPT NULL{% endblock %} + + + + + + {% block content %} + {% endblock %} + + diff --git a/templates/article.html b/templates/article.html deleted file mode 100644 index cacd529..0000000 --- a/templates/article.html +++ /dev/null @@ -1,11 +0,0 @@ -{% extends "base.html" %} -{% block title %}Ø | {{ title }}{% endblock %} -{% block content %} -
-

{{ title }}

-
- {{ content | safe }} -
-
- -{% endblock %} diff --git a/templates/base.html b/templates/base.html deleted file mode 100644 index 4defd10..0000000 --- a/templates/base.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - {% block title %}{% endblock %} - - - -
- -
- {% block content %} - {% endblock %} -
-
- Subscribe - - - diff --git a/templates/cn-home.html b/templates/cn-home.html deleted file mode 100644 index f722035..0000000 --- a/templates/cn-home.html +++ /dev/null @@ -1,10 +0,0 @@ -{% extends "base.html" %} -{% block title %}Ø | CONCEPTNULL {% endblock %} -{% block content %} -
-

-
- {{ content | safe }} -
-
-{% endblock %} diff --git a/templates/collection.html b/templates/collection.html deleted file mode 100644 index e19db74..0000000 --- a/templates/collection.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "base.html" %} -{% block title %}Ø | {{ title }}{% endblock %} -{% block content %} -
-
{{ '(' + title + ')'}}
-
- {% for key, values in collection.items() %} - -
-
{{ key }}
-
{{ values.date }}
-
-
- - {% endfor %} - -
-
-
- -{% endblock %} diff --git a/templates/data.html b/templates/data.html deleted file mode 100644 index fee072e..0000000 --- a/templates/data.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - Ø | D.A.T.A Interview - - - - - - - - - - - - -
-
-
-
- text-view -
-
-
-
-
-
-
-
-
-
60%
-
-
-
-

THE BIG

-

D.A.T.A

-

INTERVIEW

-
-
-
-
💁
- -
-
-
-
- -
- -
- -
- text-view -
-
- text-view -
-
-
-
-
-
-
- -
-
-
- About -
-
-

At the start of the summer, we had the pleasure of chatting with Paul, Tom and Aisling who are current facilitators of the Dublin Art & Technology Association. D.A.T.A has created a platform for artists, makers and thinkers to share knowledge about digital cultures and practices in Ireland since its genesis in 2002.

-

In our conversation, we had the opportunity to touch on topics such as D.A.T.A's identity, how it has evolved over the years, and a deeper look into their approach behind the process of curating & organising events.

-

We hope you enjoy the deeply insightful conversation with D.A.T.A, while having some fun navigating its latent space!

-

The website has been designed to visualise the interview in a linear and non-linear format. The interview was processed through a machine/natural language processing algorithm, which ranked each segment of text against various topics that surfaced during the interview.

-

As a result, the algorithm created a high-dimensional version of the interview, which is commonly referred to as the latent space. Once created, the machine's multidimensional understanding of the text was flattened using a t-SNE algorithm, producing the 2D mapping of the interview.

-
- -
-
- - - - - - diff --git a/templates/home.html b/templates/home.html deleted file mode 100644 index 52b8924..0000000 --- a/templates/home.html +++ /dev/null @@ -1,37 +0,0 @@ -{% extends "base.html" %} -{% block title %} Ø | Home{% endblock %} -{% block content %} -
-
-
articles 
-
- {% for key, values in articles.items() %} - - -
- {% endfor %} -
-
-
-
newsletters
-
- {% for key, values in newsletters.items() %} - - -
- {% endfor %} -
-
-
-
projects
-
- {% for key, values in projects.items() %} - - -
- {% endfor %} -
-
-
- -{% endblock %} \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..1e73f8b --- /dev/null +++ b/templates/index.html @@ -0,0 +1,40 @@ +{% extends "_base.html" %} + +{% block title %}CONCEPT NULL{% endblock %} + +{% block content %} +
+
+
+
CONCEPT NULL
+
✲ ✲ ✲
+
+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum consequat dignissim justo, posuere imperdiet justo condimentum at. Sed eget odio vitae velit efficitur facilisis lacinia eget libero. Donec ex magna, laoreet id hendrerit at, varius et sem. Phasellus tempor ante in felis vehicula, vitae rhoncus tellus posuere. Ut nec sodales urna. Sed molestie lectus vel dolor maximus, sed cursus urna mattis. Cras eu mauris sit amet mauris lacinia accumsan vitae eu arcu. Duis quis mollis mauris. Maecenas condimentum ac tortor vel sodales. Fusce eget erat ut odio interdum porta. Donec placerat nisl id dui dapibus, finibus volutpat massa placerat. Donec commodo pellentesque ipsum eget ullamcorper. Praesent fermentum sit amet turpis sit amet sagittis. Aliquam tempus, sapien eget tincidunt luctus, urna felis molestie dolor, ac blandit arcu erat vitae eros. Morbi a lacus laoreet, varius eros ut, rutrum nibh.

+
+ +
+ +
+ +
+
{{ title | safe }}
+
+ {{ cont | safe }} +
+
✲ ✲ ✲
+
+
+ +
+
+ +
+
+{% endblock %} \ No newline at end of file diff --git a/templates/meetups.html b/templates/meetups.html deleted file mode 100644 index 6ee8248..0000000 --- a/templates/meetups.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends "base.html" %} -{% block title %} Ø | Meetups {% endblock %} -{% block content %} - -
-

Meetups

-
- {{ content | safe }} -
-
-
- - -{% endblock %} \ No newline at end of file diff --git a/templates/newsletter.html b/templates/newsletter.html deleted file mode 100644 index ed1d099..0000000 --- a/templates/newsletter.html +++ /dev/null @@ -1,87 +0,0 @@ -{% extends "base.html" %} -{% block title %}Ø | {{ title }}{% endblock %} -{% block content %} -
-

{{ title }}

-
- {{ content | safe }} -
-

-
- {% for key, value in events.items() %} -
-

🔦 Spotlight

-
-
- {% for data in value %} - {% if data.spotlight %} -
-

{{ data.name }}

-

Organiser/s: {{ data.org }}

-

Location: {{ data.location }}

-

Date: {{ data.deadline }} → {{ data.endDate}}

-

{{ data.text }}

- -
-

- {% endif %} - {% endfor %} -
- {% endfor %} - - {% for key, value in events.items() %} -
-

🎪 Events

-
-
- {% for data in value %} - {% if not data.spotlight %} -
-

{{ data.name }}

-

Organiser/s: {{ data.org }}

-

Location: {{ data.location }}

-

Date: {{ data.deadline }} → {{ data.endDate}}

-

{{ data.text }}

- -
-

- {%endif%} - {% endfor %} -
- {% endfor %} -
- -
- {% for key, value in opportunities.items() %} -
-

{{ key }}

-
-
- {% for data in value %} -
-

{{ data.name }}

-

Deadline: {{ data.deadline }}

-

{{ data.location }}

-

{{ data.text }}

- -

-
- - {% endfor %} -
- {% endfor %} -
-
- -
-

That’s it for now! The newsletter gets sent out 1st and 15th of every month and we post open calls and events as they come in on our Instagram so be sure to follow us there.

- -

Again, thank you for all of your support as we continue to grow our project with the help of a great community and, as we always say, we would love to hear your thoughts, projects, events or other open opportunities so drop us an email.

- -

Chat soon, Concept NULL

- -

[conceptnullofficial@gmail.com]

-
-
- -{% endblock %} diff --git a/templates/publications-old.html b/templates/publications-old.html deleted file mode 100644 index eb0427a..0000000 --- a/templates/publications-old.html +++ /dev/null @@ -1,31 +0,0 @@ -{% extends "base.html" %} -{% block title %} Ø | Publications{% endblock %} -{% block content %} -
-
-
NEWSLETTERS
-
- {% for key, values in newsletters.items() %} -
- - -
-
- {% endfor %} -
-
-
-
PROJECTS
-
- {% for key, values in projects.items() %} -
- - -
-
- {% endfor %} -
-
-
- -{% endblock %} \ No newline at end of file diff --git a/templates/publications.html b/templates/publications.html deleted file mode 100644 index b15dae8..0000000 --- a/templates/publications.html +++ /dev/null @@ -1,29 +0,0 @@ -{% extends "base.html" %} -{% block title %} Ø | Publications{% endblock %} -{% block content %} -
-
-

Newsletter

-

Currently, we run a bi-weekly newsletter that aims to highlight different types of events and opportunities centered around new media and digital culture in Ireland.

-

The newsletter is released on the 1st and 15th of every month through Substack - You can subcribe through Substack by clicking the **SUBSCRIBE** button, and receive it directly into your inbox~

-

If you wish to sumbit any opportunities, events, residences (...) that would be a good fit for the newsletter -- please feel free to reach out to us by emailing us at conceptnullofficial@gmail.com

-

***

-

The future plan we have for the platform is that users will have the ability to add their own entries into the upcoming newsletter through the Concept NULL wiki - acting as more of a decentralised noticeboard than just a newsletter. As for now, you can view our work-in-progress newsletter, as we compile it for our Substack.

-

***

-
- -
-

Projects

-
- {% for key, values in projects.items() %} -
- - -
-
- {% endfor %} -
-
-
- -{% endblock %} \ No newline at end of file diff --git a/templates/test.html b/templates/test.html deleted file mode 100644 index 85da479..0000000 --- a/templates/test.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - test - - -
- -
-
-
- - -