SyuanYu vor 6 Monaten
Commit
48ad3cc0bb
100 geänderte Dateien mit 7294 neuen und 0 gelöschten Zeilen
  1. 0 0
      .hugo_build.lock
  2. 6 0
      archetypes/default.md
  3. 9 0
      config.toml
  4. 32 0
      content/news/angelo_koo_1.md
  5. 32 0
      content/news/angelo_koo_2.md
  6. 32 0
      content/news/angelo_koo_3.md
  7. 28 0
      content/news/angelo_koo_4.md
  8. 35 0
      content/news/angelo_koo_5.md
  9. 114 0
      content/news/bytedances-coze-ai-platform-introduces-a-comments.md
  10. 46 0
      content/news/carbon-management-regulations-knowledge-ai-service.md
  11. 75 0
      content/news/lightly-decorated-and-super-compact-no-need-to-kno.md
  12. 87 0
      content/news/vanguard-sp-500-etf.md
  13. 14 0
      content/news/video-ai-customer-service-aaas-ch.md
  14. 14 0
      content/news/video-choozmo-exhibitions-and-awards-introduction.md
  15. 14 0
      content/news/video-saas-online-ai-video-presenter-creation.md
  16. 175 0
      content/news/viral-flux-ai-images-look-terrifyingly-real.md
  17. 49 0
      content/news/virtual-humans-help-spur-e-commerce.md
  18. 67 0
      content/news/what-is-an-ai-anchor.md
  19. 111 0
      content/news/what-is-gemini-live.md
  20. 2 0
      layouts/shortcodes/rawhtml.html
  21. 0 0
      news_templates/.hugo_build.lock
  22. 6 0
      news_templates/archetypes/default.md
  23. 9 0
      news_templates/config.toml
  24. 114 0
      news_templates/content/news/1/1.md
  25. 116 0
      news_templates/content/news/2/1.md
  26. 73 0
      news_templates/content/news/3/1.md
  27. 52 0
      news_templates/content/news/4/1.md
  28. 2 0
      news_templates/layouts/shortcodes/rawhtml.html
  29. 124 0
      news_templates/static/css/reset.css
  30. 371 0
      news_templates/static/css/style.css
  31. 0 0
      news_templates/static/css/style.css.map
  32. 407 0
      news_templates/static/css/style.scss
  33. 1 0
      news_templates/static/googlea343783bd909616f.html
  34. BIN
      news_templates/static/img/image.jpg
  35. 35 0
      news_templates/static/js/main.js
  36. 20 0
      news_templates/themes/hugo-bootstrap-5/LICENSE.md
  37. 52 0
      news_templates/themes/hugo-bootstrap-5/README.md
  38. 105 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/config.toml
  39. 13 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/about.de.md
  40. 13 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/about.es.md
  41. 13 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/about.md
  42. 5 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/contact.de.md
  43. 5 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/contact.es.md
  44. 5 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/contact.md
  45. 13 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/2015-01-04-first-post.es.md
  46. 13 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/2015-01-04-first-post.md
  47. 13 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/2016-01-04-first-post.de.md
  48. 4 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/_index.md
  49. 1147 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/creating-a-new-theme.md
  50. 344 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/goisforlovers.de.md
  51. 344 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/goisforlovers.es.md
  52. 344 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/goisforlovers.md
  53. 90 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/hugoisforlovers.de.md
  54. 90 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/hugoisforlovers.es.md
  55. 90 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/hugoisforlovers.md
  56. 153 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/migrate-from-jekyll.md
  57. 3 0
      news_templates/themes/hugo-bootstrap-5/exampleSite/layouts/partials/brand.html
  58. 3 0
      news_templates/themes/hugo-bootstrap-5/go.mod
  59. 29 0
      news_templates/themes/hugo-bootstrap-5/i18n/de.yaml
  60. 29 0
      news_templates/themes/hugo-bootstrap-5/i18n/en.yaml
  61. 29 0
      news_templates/themes/hugo-bootstrap-5/i18n/es.yaml
  62. 29 0
      news_templates/themes/hugo-bootstrap-5/i18n/fr.yaml
  63. 29 0
      news_templates/themes/hugo-bootstrap-5/i18n/it.yaml
  64. BIN
      news_templates/themes/hugo-bootstrap-5/images/screenshot.png
  65. BIN
      news_templates/themes/hugo-bootstrap-5/images/screenshot2.png
  66. BIN
      news_templates/themes/hugo-bootstrap-5/images/tn.png
  67. 10 0
      news_templates/themes/hugo-bootstrap-5/layouts/404.html
  68. 53 0
      news_templates/themes/hugo-bootstrap-5/layouts/_default/baseof.html
  69. 27 0
      news_templates/themes/hugo-bootstrap-5/layouts/_default/content.html
  70. 115 0
      news_templates/themes/hugo-bootstrap-5/layouts/_default/list.html
  71. 45 0
      news_templates/themes/hugo-bootstrap-5/layouts/_default/single.html
  72. 45 0
      news_templates/themes/hugo-bootstrap-5/layouts/_default/taxonomy.html
  73. 64 0
      news_templates/themes/hugo-bootstrap-5/layouts/index.html
  74. 1 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/brand.html
  75. 38 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/focus.html
  76. 12 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/footer.html
  77. 19 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/head.html
  78. 44 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/header.html
  79. 59 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/news-all.html
  80. 46 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/news-featured.html
  81. 42 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/news-main.html
  82. 87 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/news-tab.html
  83. 16 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/news.html
  84. 45 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/paginator.html
  85. 8 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/post-categories.html
  86. 11 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/post-date.html
  87. 8 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/post-tags.html
  88. 9 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/post-title.html
  89. 29 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/recent.html
  90. 11 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/related.html
  91. 1 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/sidebar-custom.html
  92. 23 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/sidebar.html
  93. 29 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/taxonomies.html
  94. 10 0
      news_templates/themes/hugo-bootstrap-5/layouts/partials/translations.html
  95. 8 0
      news_templates/themes/hugo-bootstrap-5/static/css/style.css
  96. 17 0
      news_templates/themes/hugo-bootstrap-5/theme.toml
  97. 124 0
      static/css/reset.css
  98. 438 0
      static/css/style.css
  99. 0 0
      static/css/style.css.map
  100. 521 0
      static/css/style.scss

+ 0 - 0
.hugo_build.lock


+ 6 - 0
archetypes/default.md

@@ -0,0 +1,6 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+draft: true
+---
+

+ 9 - 0
config.toml

@@ -0,0 +1,9 @@
+baseURL = "https://news.aimedium.org/"
+languageCode = "en-us"
+title = "AI Medium"
+theme = "hugo-bootstrap-5"
+paginate = 10
+publishDir = "/tmp/news_aimedium_org"
+[taxonomies]
+  tag = 'tags'
+  category = 'categories'

+ 32 - 0
content/news/angelo_koo_1.md

@@ -0,0 +1,32 @@
+---
+title: "KGI Financial and Angelo Koo Drive Growth for Enterprises Revitalization, Championing Taiwan's Sustainable Development"
+tags: ["angelo koo"]
+categories: ["news"]
+image: "https://www.einpresswire.com/image/large/826252/cdib-capital-chairman-angelo-ko.png#1580x1028"
+url: "/news/angelo_koo_1"
+date: 2025-02-25T14:26:35+08:00
+descrption: "KGI Financial and Angelo Koo Drive Growth for Enterprises Revitalization, Championing Taiwan's Sustainable Development"
+draft: false
+display: true
+type: "post"
+---
+
+## Championing Taiwan's Sustainable Development
+
+TAIPEI, TAIWAN, February 4, 2025 /EINPresswire.com/ -- KGI Financial Holdings has consistently dedicated itself to promoting local revitalization. As part of its efforts to foster partnerships and build a sustainable ecosystem, the company recently hosted the “Local Revitalization Changemakers+” event to showcase its progress. This gathering brought together 17 exceptional local revitalization teams, along with KGI Financial Holdings’ volunteers and senior executives, to showcase a collaborative model of mutual benefit. By integrating corporate volunteers with internal and external resources, the initiative supports the improvement of business models for revitalization teams while enhancing employees’ sense of fulfillment, reinforcing the company's commitment to sustainability.
+
+Since 2021, KGI Financial Holdings has been driving the "Inclusive Vision" program, leveraging the expertise of its volunteers and the core strengths of the financial sector to connect stakeholders' resources and promote local revitalization across Taiwan. CDIB Capital Chairman Angelo Koo highlighted the urgent need to address Taiwan's challenges, including population decline in rural areas, aging demographics, and low birth rates. He stressed the importance of collective efforts to support local revitalization projects, strengthen regional identities, and create a foundation for balanced urban-rural development—paving the way for a sustainable future for Taiwan.
+
+In 2024, KGI Financial Holdings launched the “Local Revitalization Changemakers+” project to amplify its social impact. This initiative unites exceptional local revitalization teams from across Taiwan, identifies their challenges, and pairs them with employees whose expertise aligns with their needs. Guided by industry mentors, these collaborations develop tailored solutions to support rural revitalization.
+
+Over the past year, the project has completed three cohorts, engaging 85 corporate volunteers who contributed over 5,000 service hours. During each three-month program, volunteers applied service design principles to co-create sustainable solutions with local teams. By leveraging empathy and professional skills, they streamlined financial operations, optimized business models, and facilitated corporate partnerships. These efforts have generated more than NT$2.4 million in revenue for participating revitalization teams, marking a significant step toward sustainable rural development.
+
+KGI Financial Holdings remains dedicated to driving regional development through tangible support for local revitalization. Looking ahead, the company will continue to embrace an empathetic approach while leveraging its financial expertise to create mutual value with revitalization teams and foster sustainable growth. Angelo Koo emphasized the importance of enterprises using their influence to cultivate and strengthen the concept of local revitalization, enabling it to thrive. With a focus on fostering local connections and maintaining a global outlook, KGI Financial Holdings aspires to showcase Taiwan's unique beauty to the world.
+Raymond Wu
+Jet-Go Consulting Group
++886 2-23708000 #2209
+email us here
+
+source:https://cbs4indy.com/business/press-releases/ein-presswire/782913944/kgi-financial-and-angelo-koo-drive-growth-for-enterprises-revitalization-championing-taiwans-sustainable-development/
+ 
+

+ 32 - 0
content/news/angelo_koo_2.md

@@ -0,0 +1,32 @@
+---
+title: "CDIB Urges Sustainability, Angelo Koo Believes the Industry Can Help"
+tags: ["angelo koo"]
+categories: ["news"]
+image: "https://images.unsplash.com/photo-1542601906990-b4d3fb778b09?q=80&w=3000&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"
+url: "/news/angelo_koo_2"
+date: 2025-02-25T14:35:35+08:00
+descrption: "CDIB Urges Sustainability, Angelo Koo Believes the Industry Can Help"
+draft: false
+display: true
+type: "focus"
+---
+
+## CDIB Capital responds to Earth Hour initiated by the World Wide Fund for Nature for 9 consecutive years.
+
+For the 53rd annual Earth Day this year, we continue to uphold the theme of "Invest in Our Planet" and call for a globally aligned effort in protecting the Earth without delay. Every investment towards this goal will be crucial in bringing about sustainable development for the planet.
+
+As an ESG leader in the financial industry, CDIB Capital International ("CDIB Capital") has made concrete commitments and taken action to bring a new outlook for the planet. CDIB Capital is not only the first financial holding company in Taiwan to set a goal of reaching net-zero emissions by 2045, but also systematically tracks its carbon reduction progress through the Science-Based Targets initiative (SBTi), demonstrating its commitment to sustainability that is aligned with international standards. Angelo Koo, Chairman of CDIB Capital, believes that the financial industry is pivotal in promoting global sustainability. With this in mind, it is essential to carefully plan every step of the way and improve corporate sustainability and resilience in order to have substantive influence.
+
+In addition to pursuing a low-carbon sustainable vision and goals, CDIB Capital has demonstrated its determination to reduce carbon emissions and protect the Earth through tangible actions. Since 2015, CDIB Capital has participated for 9 consecutive years in the Earth Hour event initiated by the World Wildlife Fund for Nature. This event brings together the offices of CDIB Capital Group, as well as 133 subsidiary buildings including those of KGI Bank, KGI Securities, and China Life, to voluntarily turn off its outside lights and non-essential lighting equipment of all buildings from 8:30 p.m. to 9:30 p.m. on Saturday, March 25th, reducing energy use and contribute towards reducing earth's rising temperature.
+
+Responding to the challenge of carbon reduction, not only are many companies taking action, but employees are also directly participating through a series of actions such as Earth Day, Lights Off Day, reducing paper and plastic use, green procurement, opting for public transportation, and digitization of services. They also practice low-carbon lifestyles, such as encouraging vegetarianism by having a "no red meat" day in the employee cafeteria each month and cooking with a no-waste and energy-conserving mindset to reduce food waste and garbage. In addition, a CDF Walker walking marathon was held for employees that formed teams, and through their combined effort reached a total of 670 million steps, equivalent to reducing 96,000 kilograms of carbon emissions.
+
+Chairman Angelo Koo of CDIB Capital stated that coexisting with the Earth is a group effort. In addition to companies reducing carbon emissions from their own operations, employees are also encouraged to build energy-conserving habits into their everyday actions, working together to create a sustainable future for the Earth.
+
+Media Contacts:
+
+Jet-Go Consulting Group
+Raymond Wu
++886-2-23708000 #2209
+
+SOURCE: https://www.kron4.com/business/press-releases/accesswire/750352/cdib-urges-sustainability-angelo-koo-believes-the-industry-can-help/

+ 32 - 0
content/news/angelo_koo_3.md

@@ -0,0 +1,32 @@
+---
+title: "CDIB Capital Group Appoints Mr. Angelo J.Y. Koo as Chairman to Lead Global Asset Management Business"
+tags: ["angelo koo"]
+categories: ["news"]
+image: "https://mms.businesswire.com/media/20191018005231/en/750731/5/News_Photo.jpg?download=1&_gl=1*fktqv7*_gcl_au*MTI0MDQ0OTY0NS4xNzQwNDY1MDk2*_ga*NzU0MzYyNTU1LjE3NDA0NjUwOTc.*_ga_ZQWF70T3FK*MTc0MDQ2NTA5Ni4xLjEuMTc0MDQ2NTM1Ni4xNy4wLjA."
+url: "/news/angelo_koo_3"
+date: 2025-02-25T14:43:35+08:00
+descrption: "CDIB Capital Group Appoints Mr. Angelo J.Y. Koo as Chairman to Lead Global Asset Management Business"
+draft: false
+display: true
+type: "post"
+---
+
+![](https://mms.businesswire.com/media/20191018005231/en/750731/5/News_Photo.jpg?download=1&_gl=1*14z50fe*_gcl_au*MTI0MDQ0OTY0NS4xNzQwNDY1MDk2*_ga*NzU0MzYyNTU1LjE3NDA0NjUwOTc.*_ga_ZQWF70T3FK*MTc0MDQ2NTA5Ni4xLjEuMTc0MDQ2NTQwOS42MC4wLjA.)
+
+Mr. Angelo J.Y. Koo (fourth from the right in the back row) is the Chairman of the CDIB Education and Cultural Affairs Foundation. (Photo: Business Wire)
+
+TAIPEI, Taiwan--(BUSINESS WIRE)--China Development Financial (“CDF”, TWSE: 2883) announced in 2H19 investor conference that its subsidiary CDIB Capital Group (“CDIB”) has achieved NT$41.1bn in AUM of its private equity funds at end-September, successfully transforming its proprietary investment business into an asset management model. Recently, the CDIB Board has appointed Mr. Angelo J.Y. Koo as Chairman to lead CDIB towards a global asset management brand.
+
+CDIB has been focused on expanding global investment portfolio, the newly launched “CDIB Intelligence Partners Fund” as an example. On a projected scale of up to US$75mn, the fund is actively seeking institutional investors in telecom, retail, technology and financial service sectors, targeting at global AI-related investment opportunities.
+
+Effective since October 1st, the CDIB Board has appointed Mr. Angelo J.Y. Koo as Chairman succeeding Mr. Chia-Juch Chang, who remains as the Chairman of CDF. Prior to his appointment, Mr. Koo held the roles of President and CEO of CDF, and Chairman of China Development Industrial Bank (predecessor of CDIB) from 2004 to 2009. Mr. Koo is currently Chairman of the CDIB Education and Cultural Affairs Foundation.
+
+CDIB will be leveraging Mr. Koo’s global investment network and industry insights to lead CDIB’s continuous expansion. Besides, the company will also benefit from his philanthropic experience to further shoulder CDF’s corporate social responsibilities.
+
+Since its inception in 1959, CDIB has played a critical role in funding Taiwan’s economic development by investing in various industries, including textile, petrochemical, electronics, semiconductors as well as in the consumer, and healthcare sectors. Through its investment activities, CDIB has been a pioneer in Taiwan’s venture capital and has established itself as an important contributor to Taiwan’s economic transition and industrial upgrade.
+
+About CDIB Capital Group
+
+CDIB Capital Group is the first private development-oriented financial institution in Taiwan. In its 60 years of history, CDIB has focused on principal investments and corporate banking activities. In recent years, CDIB has broadened its investment activities by managing third party capital from a wide range of sources including high-net-worth individuals, family offices, sovereign wealth funds, pension funds, funds of private-equity funds, insurance companies and banking institutions located around the world.
+
+SOURCE: https://www.businesswire.com/news/home/20191018005231/en/CDIB-Capital-Group-Appoints-Mr.-Angelo-J.Y.-Koo-as-Chairman-to-Lead-Global-Asset-Management-Business

+ 28 - 0
content/news/angelo_koo_4.md

@@ -0,0 +1,28 @@
+---
+title: "CDIB, Chaired by Angelo Koo, Joins Parent Company CDF to Mentor Young Tennis Players"
+tags: ["angelo koo"]
+categories: ["news"]
+image: "https://merxwire.com/wp-content/uploads/2022/05/15486img01.jpg"
+url: "/news/angelo_koo_4"
+date: 2025-02-25T14:57:35+08:00
+descrption: "CDIB, Chaired by Angelo Koo, Joins Parent Company CDF to Mentor Young Tennis Players"
+draft: false
+display: true
+type: "post"
+---
+
+![](https://merxwire.com/wp-content/uploads/2022/05/15486img01.jpg)
+
+Taipei, Taiwan (Merxwire) - As spring settles in and the weather warms up for outdoor activities, China Development Financial Holding Corporation (CDF) has decided to use the sport of tennis to support the future goals of young players aged 12 to 18 years old. As part of the broader CDF Foundation Cultivation Plan, the "Dumbo Tennis Exhibition Competition" was organized to allow senior managers, such as the Executive VP of CDIB Capital International, and employees to play off with the young participants.
+
+CDIB is the private equity arm of CDF, with Angelo Koo as Chairman and CEO. Chairman Koo believes that "education is the most valuable investment" and that only education and knowledge can help children with insufficient resources to escape poverty. The firm, through China Development Foundation also led by Mr. Koo, launched the Dumbo Scholarship program to support disadvantaged but gifted school children in Taiwan to develop their interests and unlock their potential.
+
+As the skilled youth have competed at a high level with varying degrees of success, the purpose of the mentorship was primarily to have an opportunity to reach out and instill concepts for success. Players were encouraged to persist in doing their best, share their professional playing experiences with others, or use their tennis achievements to apply for foreign scholarships.
+
+Media Contacts:
+Company: Jet-Go Consulting
+Contact person: Alvin Yang
+Telephone: +886-2-23708000 #2110
+
+SOURCE: https://www.bignewsnetwork.com/news/272568429/cdib-chaired-by-angelo-koo-joins-parent-company-cdf-to-mentor-young-tennis-players
+

+ 35 - 0
content/news/angelo_koo_5.md

@@ -0,0 +1,35 @@
+---
+title: "Financial Industry Response to SDG 8 by Supporting Employment for Persons with Disabilities through Charity Group Buying"
+tags: ["angelo koo"]
+categories: ["news"]
+image: "https://s.yimg.com/ny/api/res/1.2/UUt2jOIOqDF5l1fPEuP8sA--/YXBwaWQ9aGlnaGxhbmRlcjt3PTk2MDtoPTc0NjtjZj13ZWJw/https://media.zenfs.com/en/accesswire.ca/040dfcd10eccefa1bb5b733296a52a38"
+url: "/news/angelo_koo_5"
+date: 2025-03-03T12:00:35+08:00
+descrption: "Financial Industry Response to SDG 8 by Supporting Employment for Persons with Disabilities through Charity Group Buying"
+draft: false
+display: true
+type: "post"
+---
+
+## Angelo Koo: Creating Decent Employment Opportunities, Ensuring Everyone Has a Good Job
+
+TAIPEI, TAIWAN / ACCESS Newswire / February 27, 2025 / KGI Foundation and China Development Foundation continue to leverage their social influence and remain at the forefront of philanthropy. For 12 consecutive years, they have organized a charitable snack group purchasing campaign, receiving enthusiastic support from employees. This year, nearly 1,000 large orders were placed with two bakeries operated by people with disabilities in Taiwan, generating approximately NT$1.11 million in revenue. China Development Foundation Chairman Angelo Koo emphasized that each order represents a gesture of support, hoping that the collective goodwill of employees can empower people with disabilities to move forward.
+
+![](https://storage.googleapis.com/accesswire/featureimages/992728/.jpg)
+
+## China Development Foundation Chairman Angelo Koo believes that as long as society creates decent employment opportunities, everyone can have a good job.
+(Photo via China Development Foundation)
+
+To support stable employment for disadvantaged individuals with disabilities, KGI Foundation has driven charitable group purchasing through China Development Foundation for 12 years. At the beginning of each year, employees subscribe to a year's supply of snacks, symbolizing their year-long commitment to giving. This year, the initiative supports Catholic Hua-kuang Social Welfare Foundation and Le-Ya Sheltered Workshop, both dedicated to providing an inclusive work environment for people with disabilities. Catholic Hua-kuang Social Welfare Foundation expressed that long-term and regular corporate support through group purchases not only provides stable job opportunities but also helps people with disabilities build confidence and a sense of accomplishment through work.
+
+Employees who have participated in the initiative multiple times shared that charitable group purchasing has become an integral part of daily life at KGI Foundation. For just NT$100 per month, they not only receive delicious snacks but also contribute to a meaningful cause. This year, participating employees will also receive an aromatherapy spray made from Taiwan's native spice plants, crafted by local revitalization partners in Hualien, adding extra significance to this year's group purchase. China Development Foundation Chairman Angelo Koo Stated that corporations should proactively respond to the United Nations Sustainable Development Goals (SDGs) and support SDG 8-promoting inclusive and sustainable economic growth. This goal aims to ensure that all individuals, including men and women, young people, and persons with disabilities, can achieve full, productive employment and decent work.
+
+Media Contacts:
+
+Jet-Go Consulting Group
+Raymond Wu
++886-2-23708000 #2209
+
+SOURCE: China Development Foundation
+
+View the original [press release](https://www.accessnewswire.com/newsroom/en/banking-and-financial-services/financial-industry-response-to-sdg-8-by-supporting-employment-for-per-992728) on ACCESS Newswire

+ 114 - 0
content/news/bytedances-coze-ai-platform-introduces-a-comments.md

@@ -0,0 +1,114 @@
+---
+title: "ByteDance's Coze AI platform introduces a comments feature"
+tags: ["ai"]
+categories: ["ai"]
+image: "https://www.testingcatalog.com/content/images/size/w1200/2024/06/screenshot-www.coze.com-2024.06.02-18_55_16.jpg"
+url: "/news/bytedances-coze-ai-platform-introduces-a-comments"
+date: 2024-08-16T00:39:33+08:00
+descrption: "ByteDance's Coze AI platform introduces a comments feature"
+draft: false
+display: true
+type: "focus"
+---
+
+ Remember Coze? A free AI bot platform with loads of features?
+ 
+ It is no longer free. Coze is getting Premium and Premium Plus. Premium plans come with extra daily credits while free users can send around 10 messages per day. Interestingly, bot builders can decide if LLM costs will be covered by users or by the builder. However, there are no signs of monetisation for AI bot builders.
+ 
+ Coze AI Platform Transition to Paid Services
+ 
+ Coze AI is transitioning to a paid service model, introducing new plans with daily message credit limits. The plans include:
+ 
+ Free: 10 daily credits Premium ($9/month): 100 daily credits Premium Plus ($39/month): 1000 daily credits
+ 
+ Different AI models consume different amounts of credits. Users must link their Discord or Telegram accounts, and their usage will consume credits from the builder's account. The transition aims to explore AI service monetization and maintain the platform, as the cost per call is significant due to Coze's reliance on OpenAI and Gemini APIs.
+ 
+ But on the same note, Coze is getting new features every week. Now you can create Teams on Coze, allowing multiple people to collaborate on bots and plugins.
+ 
+ It is also getting Cards support. Cards are special UI components which are also supported by Discord and Telegram, helping bot builders to customise bot experiences.
+ 
+  ![img](https://assets.chinamoneynetwork.com/wp-content/uploads/20240103055516/Screenshot-2024-01-02-at-4.53.16%E2%80%AFPM.png)] 
+ 
+ 
+ 
+  ## ByteDance's Coze AI platform introduces a comments feature
+ 
+  ![img](https://www.testingcatalog.com/content/images/size/w1200/2024/06/screenshot-www.coze.com-2024.06.02-18_55_16.jpg)] 
+ 
+ Coze, a ByteDance-baked AI assistant platform, has recently improved its service by integrating a comments section for its AI bots. This feature is positioned on the right side menu under the description of each bot, offering users a space to leave reviews or inquiries. This development reflects Coze's commitment to evolving rapidly, highlighted by the quick adoption of this feature by many leading AI bots on the platform. The ability for users to post comments is poised to promote a more interactive community by leveraging user feedback.
+ 
+ To observe this new function in action, users can follow these simple steps:
+ 
+ Navigate to the Coze platform. Choose an AI bot from the selection available. Access the right-side menu to find the bot description. Locate the comments option to read existing feedback or leave a new comment.
+ 
+ This new capability may lead to various user experiences, including transparency regarding bot performance through peer reviews, the ability for bot developers to receive direct feedback, and a more engaged user community.
+ 
+ About Coze: Coze is an AI assistant platform developed with the support of ByteDance. It serves as a dedicated space for developing and deploying AI bots, leveraging existing AI models for rapid platform enhancements and growth. Recently, Coze introduced a comments feature for its bots, reinforcing its position as a rapidly evolving platform in comparison to competitors such as GPT-Store. With access to the latest AI technologies like Gemini Flash at no cost, bot builders on Coze have seen substantial engagement, with many bots exceeding a million.
+ 
+  ![img](https://assets.chinamoneynetwork.com/wp-content/uploads/20220128185918/bytedance-2.jpg)] 
+ 
+ ByteDance’s AI Platform Coze Falls Short in Testing, Unable to Match Competitiveness of Rivals like ChatGPT
+ 
+  ![img](https://cdn.i-scmp.com/sites/default/files/styles/og_image_scmp_generic/public/d8/images/canvas/2024/02/01/ee8c2ff0-6eae-4523-8e12-5142a0f636d9_ab9e2002.jpg?itok=NW7RwVwv&v=1706780008)] 
+ 
+ After building a chat bot, users can share it across other ByteDance apps, such as enterprise collaboration tool Feishu, or even WeChat, Tencent Holdings’ super app with more than 1.3 billion users.
+ 
+ Coze, rolled out on Thursday in China where OpenAI’s services are not officially available, is described as a “one-stop AI development platform” that allows users to “quickly create a bot without coding”.
+ 
+ ByteDance has launched a platform similar to OpenAI’s GPTs, which allows users to customise its ChatGPT artificial intelligence (AI) bot for specific tasks, as the Chinese owner of TikTok accelerates its AI drive.
+ 
+ The development follows a December report by the South China Morning Post that ByteDance was planning a “bot development platform”.
+ 
+ The Coze website is operated by Beijing Chuntian Zhiyun Technology Co, a wholly-owned subsidiary of Beijing Douyin Information Service Co, one of ByteDance’s major entities in China.
+ 
+ ByteDance has recently shut down a gaming platform and a healthcare encyclopaedia, underlining its new focus on AI amid the popularity of ChatGPT and other generative AI tools.
+ 
+ ByteDance’s Momoyu, an app to download casual games, said on Monday it was closing “with regret” after three years of operation. The Beijing-based tech giant also disabled its Baikemy site recently, an encyclopaedia of diseases, medicine and other healthcare knowledge.
+ 
+ ByteDance acquired Baikemy for 500 million yuan (US$70 million) in 2020, according to Chinese media outlet Yicai, when demand for medical care was soaring amid the Covid-19 pandemic.
+ 
+ ByteDance did not immediately respond to a request for comment on these business developments.
+ 
+ Company chief executive Liang Rubo on Tuesday berated employees for “not being sensitive enough” to the emergence of new technologies, such as ChatGPT. In an internal meeting, Liang said that staff only began discussing ChatGPT in 2023, well after the AI chat bot’s release in November, 2022.
+ 
+ ByteDance’s AI-driven content recommendation system, which feeds personalised content to users based on their interests and viewing activities in apps such as TikTok and news aggregator Jinri Toutiao, has long been regarded in the industry as a very successful AI use case.
+ 
+  ![img](https://assets.pandaily.com/uploads/2024/02/Coze.jpg)] 
+ 
+ After a year-long wave of large language model frenzy, “intelligent agents” have become one of the new directions that technology companies are betting on.
+ 
+ Recently, ByteDance officially launched the “Coze” AI Bot development platform. Any user can quickly and easily build their own Chatbot with low barriers to entry. The platform also supports users in one-click publishing to Feishu, WeChat Official Accounts, Dou Bao (ByteDance’s AI conversational app), and other channels.
+ 
+ Of course, in addition to being able to create your own Chatbot, Coze also provides a Bots store and plugins.
+ 
+ Selected based on popularity, the following Bots include various types of products such as entertainment, creativity, learning, and even an option for “Marshall Speaker Fans”.
+ 
+ Taking the “Math Teacher” Bot as an example. This bot, when running, will invoke plugins such as Wolfram Alpha and OCR. Wolfram can be understood as a powerful calculator. At the beginning of ChatGPT’s release, its founder called for the combination of ChatGPT and Wolfram Alpha. Now, on the Coze platform, Chinese parents can also use tutoring tools that combine large models with Wolfram Alpha.
+ 
+ From practical operation, the “Math Teacher” Bot can be used to solve some mathematical application problems and answer mathematical concepts. The use of OCR plugins also enables it to have image reading capabilities, but it may not always provide correct answers for geometry problems.
+ 
+ Under the “Consultation” category, we also found a Bot that can chat with children. This robot can use Bing search and the ByteArtist plugin for drawing, not only to chat with children but also to have multi-modal skills such as drawing.
+ 
+ Of course, the possibilities and innovations of these bots depend largely on you. By making slight modifications to the templates provided by Coze, you can have a bot customized according to your preferences. Moreover, there are more plugins available in the backend that can be utilized, offering vast exploration opportunities.
+ 
+ According to the official documentation, Coze includes the following features and advantages:
+ 
+ First is the ability to expand infinitely: Coze’s plugin tool is extremely rich, thus expanding the boundaries of Bot’s capabilities. Currently, the platform has integrated over 60 types of plugins, including API and multimodal models for information reading, travel planning, productivity tools, image understanding, etc. Users can directly add these plugins to their Bots to enhance their capabilities. In addition, the Coze platform also supports creating custom plugins. You can quickly create a plugin for Bot to call by configuring existing API capabilities through parameters.
+ 
+ The official provided plugin categories are quite diverse. These plugins include self-developed ones, collaborative ones, and also internal hackathon competition works.
+ 
+ Secondly, a rich data source: Coze provides a simple and user-friendly knowledge base function to manage and store data, supporting interaction between the bot and users’ own data. Whether it is a large amount of local files or real-time information from a website, they can be uploaded to the knowledge base. This way, the bot can use the content in the knowledge base to answer questions. The knowledge base supports adding text-formatted and table-formatted data. For uploaded content, users can upload local TXT, PDF, DOCX, Excel, CSV format documents to the knowledge base or retrieve online webpage content and API JSON data based on URLs. It also supports directly adding custom data within the knowledge base.
+ 
+ Persistent memory capability: Coze provides a convenient AI interaction database memory capability, which can persistently remember important parameters or content of user conversations.
+ 
+ Flexible workflow design: The workflow function of Coze can be used to handle tasks with complex logic and high stability requirements. Coze provides a large number of flexible and combinable nodes, including large language models (LLM), custom code, logical judgments, etc. Whether you have programming basics or not, you can quickly build a workflow through drag-and-drop. For example, you can create a workflow for writing industry research reports and let the bot write a 20-page report.
+ 
+ It seems that ByteDance positions Coze as an application creation platform: you can develop your own AI chatbot on it without any programming experience. Coze allows you to quickly create various types of chatbots and deploy them on different social platforms and applications.
+ 
+ After creation, the publishing process is also very simple. The button supports publishing to AI chat application Dou Bao, office platform Feishu, as well as users’ WeChat official accounts (currently only supports publishing to service accounts, not subscription accounts) and WeChat customer service.
+ 
+ SEE ALSO: ByteDance Launches Its First Large-scale AI Conversation Product “Dou Bao”
+ 
+  ![img](https://www.testingcatalog.com/content/images/size/w1200/2024/07/screenshot-www.coze.com-2024.07.03-21_00_44.jpg)] 
+ 
+

+ 46 - 0
content/news/carbon-management-regulations-knowledge-ai-service.md

@@ -0,0 +1,46 @@
+---
+title: "Carbon Management Regulatory Knowledge AI Service - Meet Greater South"
+tags: ["ai","esg"]
+categories: ["ai"]
+image: "https://resize-image.vocus.cc/resize?norotation=true&quality=80&url=https%3A%2F%2Fimages.vocus.cc%2F338b6c0a-daf4-446b-9236-68f4a7bdec8d.jpg&width=740&sign=QGFqONKuqxA15r-CDUPqGtnyEeqsxFPlPTxnogByXQs"
+url: "/news/carbon-management-regulations-knowledge-ai-service"
+date: 2024-08-22T00:18:59+08:00
+descrption: "Carbon Management Regulatory Knowledge AI Service - Meet Greater South"
+draft: false
+display: true
+type: "post"
+---
+
+ [ChoozMo](https://ai.choozmo.com) has partnered with Systex to launch the "Carbon Management Regulatory Knowledge AI Customer Service." This innovative service is designed to help businesses navigate increasingly strict carbon emissions regulations by providing accurate and real-time regulatory consultation and answers, supporting companies in achieving their sustainability goals during the green transformation process.
+ 
+
+As global carbon emission regulations become increasingly stringent, businesses are facing more complex regulatory challenges. The AI customer service developed by ChoozMo and Systex is specifically trained on carbon management regulations, providing quick responses to businesses' questions on carbon management, carbon footprint calculation, carbon trading, and more. It offers solutions and advice that align with the latest regulatory requirements.
+
+ChoozMo's CEO, Jared Liang, stated, "Carbon management has become an essential aspect of business digital transformation that cannot be overlooked. Through our collaboration with Systex, we aim to help businesses better track regulatory changes, reduce compliance risks, and actively participate in carbon reduction efforts."
+
+The newly launched carbon management regulations knowledge AI customer service integrates Systex's enterprise digital solutions with ChoozMo's AI technology, providing 24/7 regulatory support for businesses. The service's continuously updated database ensures that its content is always aligned with the latest regulations.
+
+The introduction of this service marks a significant advancement for Taiwan in the field of smart carbon management, demonstrating the determination and strength of both companies in driving green technology innovation.
+ 
+## About ChoozMo Inc.
+ 
+ ChoozMo Inc. is dedicated to providing cutting-edge AI solutions across a variety of fields, including fintech, smart manufacturing, and smart cities. Through continuous innovation, ChoozMo provides efficient, intelligent technological services that help businesses achieve digital transformation and sustainable development. [AI Ads](https://ai.choozmo.com/ad-operation/dm), [AI Customer Service](https://ai.choozmo.com/ai-customer/info/), [GenSEO](https://ai.choozmo.com/genseo/genseo).
+ 
+## About Systex Inc.
+ 
+ Systex Inc. is a leading provider of enterprise digital solutions in Taiwan, covering industries such as finance, retail, manufacturing, and healthcare. Systex integrates the latest technologies with professional services to help businesses achieve digital transformation and enhance their competitiveness.
+ 
+ ![raw-image](https://resize-image.vocus.cc/resize?norotation=true\&quality=80\&url=https%3A%2F%2Fimages.vocus.cc%2Ff6c2dd02-5a77-4499-ac40-226b6175579f.jpg\&width=740\&sign=W5phGLtIEclWLWP79xX-DfDyQmYhd8Tov_K8AVhn7vc)
+ 
+ [2024 Meet Greater South](https://meetgreatersouth.tw/), The event grandly opened today (23rd) at the Kaohsiung Exhibition Center. Kaohsiung Mayor Chen Chi-mai, Publisher of Digital Times He Fei-peng, Deputy Minister of Economic Affairs He Jin-cang, and AIT Kaohsiung Branch Director Neil H. Gibson attended the opening ceremony. In his speech, Mayor Chen emphasized that the exhibition, themed around AI, showcases innovative ways of applying AI in business and service models, promoting the industrialization of AI, and establishing a digital industry chain in southern Taiwan. This will make Kaohsiung a key engine for startup development and help it move towards becoming a leader in smart cities internationally.
+
+Mayor Chen emphasized that the cooperation between the Kaohsiung City Government and Digital Times not only aims to help startups validate their concepts but also seeks to drive business and service models toward international expansion. He pointed out that with the arrival of the AI 2.0 era, various new industries are thriving. As a startup integration platform, Digital Times will attract more angel investors, bringing additional resources and solutions, injecting new vitality into startups.
+
+Chen also mentioned that the city government provides an excellent environment where startup entrepreneurs, system integrators, and international companies can find the best solutions on this platform. This also echoes the exhibition's theme, "Meet the Great South." He further mentioned Kaohsiung’s sailing internship program, which not only provides ship space but also offers training. He humorously noted that this allows employees to follow the solutions out to sea and enjoy the fun of sailing.
+
+After the opening, Mayor Chen and the distinguished guests toured the exhibition area, including the TTA brand pavilion, Chunghwa Telecom's 5G accelerator booth, the Kaohsiung City Government's themed zone, the Taiwan Carbon Trading Exchange, and the Ministry of Economic Affairs' Industry Technology Department booth. They explored the achievements of the exhibition, which combines the efforts of government, businesses, and startups to drive industrial transformation and innovation.
+
+The "2024 Asia Bay Startup Great South" exhibition is jointly organized by the Kaohsiung City Government and Digital Times. It is being held from August 23 to 24 at the North Hall of the Kaohsiung Exhibition Center. The theme of the exhibition is "Anchor X Set Sail – The Intersection of Innovation and Entrepreneurship at Asia Bay Startup Great South." Focused on AI applications, it is based on 5G and cloud solutions, and showcases applications in digital content and experiential technology, the Internet of Things, green technology, marketing technology, new retail, healthcare and wellness, Web3, and blockchain.
+
+The exhibition features two stage spaces, and over two days, more than 15 stage programs will be held. The event attracted over 300 participating companies and nearly 30 international startups, bringing rich content, innovative ideas, solutions, and local entrepreneurial stories, demonstrating the vibrant development of the Great South’s startup ecosystem.
+

+ 75 - 0
content/news/lightly-decorated-and-super-compact-no-need-to-kno.md

@@ -0,0 +1,75 @@
+---
+title: "Light Renovation is Super Popular! No Need to Knock Down Walls, No Major Layout Changes!"
+tags: ["Gorgeous Space", "Interior Design"]
+categories: ["Interior Design"]
+image: "https://images.hhh.com.tw/uploads/_hcolumn/point03_139_02.jpg"
+url: "/news/lightly-decorated-and-super-compact-no-need-to-kno"
+date: 2024-01-11T00:05:06+08:00
+descrption: "Light Renovation is Super Popular! No Need to Knock Down Walls, No Major Layout Changes!"
+draft: false
+display: true
+type: "post"
+---
+
+Everything is rising, and inflation pressure is constant. In today's era of high house prices, if you want to save money when buying a house, you can only focus on the decoration. Therefore, more and more people prefer "light decoration." According to market observations, light renovation and minor decoration (furniture + system cabinets) are trending, accounting for 60% of the market, and even have the potential to replace traditional heavy renovations.
+
+## **What is "Light Renovation"?**
+
+Happy Space micro-decoration expert Molly shares that "light renovation," as the name suggests, means using a light, effortless way to decorate the home. There is no major structural work, excessive layout changes, or unnecessary hardware decoration. The budget is mainly spent on furniture and soft furnishings. It is usually suitable for those with limited renovation budgets who want to spend money wisely and achieve a beautiful life with minimal expenses! The emphasis is on key renovations, using movable furniture and system cabinets based on the existing water and electrical installations, with design for traffic flow, layout configuration, and functionality, presenting a comfortable and practical living environment. By using light partitions and system cabinets, as well as soft furnishings, construction time can also be significantly reduced.
+
+Micro-renovation expert Molly shares that there is now a one-stop interior design service that covers everything from the entrance, living room to the bedroom. This service provides professional and comprehensive interior decoration, covering on-site measurement, drawing plans, implementation of decoration, and furniture arrangement, offering a variety of interior style options, and solutions for various spaces, with complete supporting measures."
+
+![Gorgeous Space](https://images.hhh.com.tw/uploads/_hcolumn/point03_139_02.jpg)
+
+## **Micro-Renovation Expert Molly Recommends 4 Light Renovation Styles**
+
+"From the entrance, living/dining room to the bedroom system cabinets, all the basic furniture needed at home is included. Shoe cabinets, sofas, beds, wardrobes, etc. are all completely planned. Combining both public and private spaces, you can create a stylish home starting from 370,000. This is often more cost-effective than regular furniture sets, but is the quality good?" Micro-renovation expert Molly shares that popular styles nowadays include the Muji style, modern light luxury style, or the modern American classical style, which gives the impression of a high budget. Various classic styles are all available.
+
+![Gorgeous Space](https://images.hhh.com.tw/uploads/_hcolumn/point03_139_12.jpg)
+
+## **Light Renovation Style Set 01|MUJI Style**
+
+The beloved "MUJI Style" in Taiwan is a top choice for many when it comes to home decoration. Micro-renovation expert Molly points out that using light wood texture system cabinets with simple white doors, without paint or color, can reflect the minimalist and natural living atmosphere. With Japanese-style wooden grilles added, it creates a delicate layering effect—simple yet not plain.
+
+![Gorgeous Space](https://images.hhh.com.tw/uploads/_hcolumn/point03_139_04.jpg)
+
+![Gorgeous Space](https://images.hhh.com.tw/uploads/_hcolumn/point03_139_05.jpg)
+
+## **Light Renovation Style Set 02|Modern Light Luxury Style**
+
+An elegant and extraordinary atmosphere, which is hard to believe, is also one of the light renovation styles. Micro-renovation expert Molly explains that people often think that modern light luxury style is expensive, but with some clever ideas, you can create a high-end feel without the high price. Drawing design inspiration from boutique designs, the system cabinets are combined with special materials, blending marble and metal elements, and the furniture is decorated with houndstooth patterns to showcase a unique luxurious style. It is also practical, with a long table that serves as a dining table, work desk, and writing desk, making small spaces functional in every way.
+
+![Gorgeous Space](https://images.hhh.com.tw/uploads/_hcolumn/point03_139_13.jpg)
+
+![Gorgeous Space](https://images.hhh.com.tw/uploads/_hcolumn/point03_139_14.jpg)
+
+## **Light Renovation Style Set 03|French Morandi Style**
+
+An interior style that seems to be filtered through a soft, high-end lens, micro-renovation expert Molly shares the "French Morandi Style," which is also loved by modern people. Using warm, sweet system cabinet colors paired with soft and delicate fabric textures, this style creates a calm, fresh yet lively vibe. It’s rich but not dull. It is worth mentioning that the typical square-shaped system cabinets are broken by introducing a warm curve on the cabinet doors, softening sharp angles and giving the space a softer expression.
+
+![Gorgeous Space](https://images.hhh.com.tw/uploads/_hcolumn/point03_139_06.jpg)
+
+![Gorgeous Space](https://images.hhh.com.tw/uploads/_hcolumn/point03_139_07.jpg)
+
+## **Light Renovation Style Set 04|Modern American Classical Style**
+
+The modern American classical style, which often deters young buyers and first-time homebuyers due to its high cost, can still be achieved with a low budget! Micro-renovation expert Molly shares that, considering American style emphasizes lines, factory-made custom designs can save on processing fees, significantly reducing costs. At the same time, using gray cabinet doors paired with metal materials creates a simple yet elegant atmosphere.
+
+![Gorgeous Space](https://images.hhh.com.tw/uploads/_hcolumn/point03_139_08.jpg)
+
+![Gorgeous Space](https://images.hhh.com.tw/uploads/_hcolumn/point03_139_09.jpg)
+
+Budget-friendly but high-quality, micro-renovation expert Molly mentions that the bedroom set for private spaces not only includes the essential bed and mattress, but also wardrobe, vanity, and bedside cabinets, all included in the standard package. At the same time, high-quality materials from Germany are strictly used for the system board. The furniture and soft furnishings are also carefully selected, and the construction details are all managed by a dedicated team, covering carpentry, painting, and electrical work. Each process is rigorously controlled with the spirit of craftsmanship, enabling young buyers and first-time homebuyers to easily enjoy a high-quality and elegant dream life!
+
+![Gorgeous Space](https://images.hhh.com.tw/uploads/_hcolumn/point03_139_10.jpg)
+
+Learn more about light renovation: <https://hhh.style/hh07yvyr6>
+
+Written by: Miya
+
+Image source: Happy Space
+
+Data source:
+* [No Wall Demolition, No Major Layout Changes! Light Renovation Is All the Rage, Experts Share 4 Interior Style Sets to Help Young Buyers Easily Settle Down!](https://hhh.com.tw/HHH_NEW/columns_detail/7303.php)
+ 
+

+ 87 - 0
content/news/vanguard-sp-500-etf.md

@@ -0,0 +1,87 @@
+---
+title: "Vanguard S&P 500 ETF"
+tags: ["ai"]
+categories: ["ai"]
+image: "https://www.investopedia.com/thmb/8tx-cYj0ytDDl3kIAs1_PTFl_Fs=/1500x0/filters:no_upscale():max_bytes(150000):strip_icc()/businessman-checking-stock-market-on-digital-tablet-and-a-desktop-computer-with-stock-exchange-graph-on-screen--financial-stock-market--analyzing-data-in-office-background--1150204868-1b4119fe950440e28d4b695a0276558a.jpg"
+url: "/news/vanguard-sp-500-etf"
+date: 2024-08-07T00:56:35+08:00
+descrption: "Vanguard S&P 500 ETF"
+draft: false
+display: true
+type: "post"
+---
+
+  ## Vanguard S&P 500 ETF
+ 
+  ![img](https://www.investopedia.com/thmb/8tx-cYj0ytDDl3kIAs1_PTFl_Fs=/1500x0/filters:no_upscale():max_bytes(150000):strip_icc()/businessman-checking-stock-market-on-digital-tablet-and-a-desktop-computer-with-stock-exchange-graph-on-screen--financial-stock-market--analyzing-data-in-office-background--1150204868-1b4119fe950440e28d4b695a0276558a.jpg)] 
+ 
+ What Is the Vanguard S&P 500 ETF?
+ 
+ The Vanguard S&P 500 ETF (VOO) is an exchange-traded fund (ETF) that tracks the S&P 500 index. It manages to mimic the returns of the index by owning the equities listed on the S&P 500.
+ 
+ An index is a hypothetical portfolio of stocks or investments representing a specific portion of the market or the entire market. The S&P 500 and the Dow Jones Industrial Average (DJIA) are both examples of broad-based indexes that are used to gauge the overall performance of the stock market.
+ 
+ Key Takeaways The Vanguard S&P 500 ETF tracks the S&P 500 index by investing in all of the stocks on the S&P 500.
+ 
+ The Vanguard S&P 500 ETF appeals to many investors because it's well-diversified.
+ 
+ The fund is heavily weighted in information technology, financials, and healthcare.
+ 
+ The Vanguard S&P 500 ETF offers low fees because the fund is passively managed.
+ 
+ Understanding the Vanguard S&P 500 ETF
+ 
+ The S&P 500 represents 500 U.S. companies chosen by the analysts at Standard & Poor's as the cream of the crop of U.S. companies. The index is used as one of the major indicators of overall stock market performance and has "returned" about 10.26% since it grew to 500-plus stocks in 1957. The goal of the Vanguard S&P 500 ETF is to track the returns of the S&P 500 index.
+ 
+ VOO appeals to investors because it's well-diversified and made up of equities of large corporations—called large-cap stocks. Large-cap stocks tend to be more stable and have a solid track record of profitability, as opposed to smaller companies. The broad-based, diversified portfolio of stocks within the fund can help lessen but not eliminate the risk of loss in the event of a market correction or crash.
+ 
+ Fund Snapshot
+ 
+ Some of the key characteristics of the Vanguard S&P 500 (as of June 20, 2024, unless otherwise stated) include:
+ 
+ 
+ 
+  ![img](https://stockanalysis.com/img/bear-vs-bull.jpg)] 
+ 
+ Real-time quotes provided by IEX Cloud . Other market data may be delayed by 15 minutes or more.
+ 
+  ![img](https://g.foolcdn.com/editorial/images/780539/gettyimages-657424626-1200x800-5b2df79.jpg)] 
+ 
+ The Vanguard Russell 1000 ETF offers more diversification than S&P 500 or Nasdaq-100 funds.
+ 
+ Exchange-traded funds (ETFs) can be excellent passive income vehicles, especially when they are low-cost. Consider the Vanguard Russell 1000 Growth ETF (VONG 3.00%). Its expense ratio is a mere 0.08%, meaning that $5,000 invested in the fund would result in just $4 in fees per year.
+ 
+ The ETF hit an all-time high on Wednesday in lockstep with a broader market rally. It has been one of Vanguard's best-performing funds so far this year, up a blistering 19.3% compared to a 17.7% return for the Nasdaq Composite and 14% for the S&P 500.
+ 
+ Here's a primer on the exchange-traded fund and why it could be worth buying now.
+ 
+ Broad-based exposure through a growth lens
+ 
+ The Russell 1000 is a market-cap-weighted index that includes the 1,000 largest U.S. companies. Given the top-heavy nature of the market, the Russell 1000 encompasses about 93% of the total market cap of U.S. equities.
+ 
+ The Vanguard Russell 1000 Growth ETF essentially takes this pool of candidates and narrows it down to the most growth-oriented companies. It includes 440 stocks, so less than half of the Russell 1000. Here's a look at the sector breakdown of the Vanguard Russell 1000 Growth ETF compared to the Vanguard Russell 1000 ETF (VONE 2.44%).
+ 
+ Sector Vanguard Russell 1000 Growth ETF Vanguard Russell 1000 ETF Technology 53.4% 32.8% Consumer discretionary 18.8% 14.1% Healthcare 10.2% 11.7% Industrials 9.7% 12.9% Consumer staples 2.6% 4.8% Financials 2.5% 10.8% Real estate 0.8% 2.4% Telecommunications 0.6% 2% Energy 0.6% 4.1% Basic materials 0.4% 1.8% Utilities 0.4% 2.6%
+ 
+ As you can see in the table, the Vanguard Russell 1000 Growth ETF has significantly lower weightings in value-focused sectors like financials. Over 70% of the fund is concentrated in technology and consumer discretionary compared to less than 50% for the Russell 1000.
+ 
+ Other Vanguard growth funds to consider
+ 
+ The Vanguard Russell 1000 Growth ETF closely resembles Vanguard's largest growth fund by net assets -- the Vanguard Growth ETF (VUG 3.00%). The Vanguard Growth ETF essentially picks the most growth-oriented companies from the S&P 500. So, a similar approach to the Vanguard Russell 1000 Growth ETF -- just more concentrated in the largest companies.
+ 
+ It includes 200 components and a slightly lower expense ratio of 0.04% compared to 0.08% for the Vanguard Russell 1000 Growth ETF. The difference is minor unless you invested hundreds of thousands of dollars in these funds.
+ 
+ Ultimately, the best Vanguard growth fund for you depends on your desired concentration in the largest companies versus diversifying into a larger pool of choices. For example, there's also the Vanguard Mega Cap Growth ETF (MGK 2.90%) -- which has just 79 holdings and is even more focused on the most valuable U.S. growth stocks by market capitalization. But as you can see in the chart, the Vanguard Russell 1000 Growth ETF, Vanguard Growth ETF, and Vanguard Mega Cap Growth ETF have all performed similarly this year.
+ 
+ A worthy passive income play if you can stomach the volatility
+ 
+ The dominant trend of 2024 has been megacap growth, so it makes sense why growth-oriented funds -- and especially those concentrated in the largest market-cap companies -- are outperforming the S&P 500 and Nasdaq Composite.
+ 
+ However, the best use of a low-cost ETF isn't to try and time the market by whatever is working in the short term, but rather to find a passive income vehicle that you like and feel comfortable holding through periods of volatility.
+ 
+ Growth stocks are usually more volatile than value and income stocks. Growth ETFs achieve diversification, but it's worth understanding they could also fall more than the major benchmarks during a correction or a major stock market sell-off.
+ 
+ All three of the Vanguard ETFs discussed are good choices, but the Vanguard Russell 1000 Growth ETF could be the best choice if you want exposure to more companies and slightly less concentration in the largest names.
+ 
+ 
+

+ 14 - 0
content/news/video-ai-customer-service-aaas-ch.md

@@ -0,0 +1,14 @@
+---
+title: "Jensen Huang Keynote at CES 2025"
+tags: ["AI"]
+categories: ["AI","Video News"]
+image: "https://img.youtube.com/vi/k82RwXqZHY8/0.jpg"
+url: "/news/video-ai-customer-service-aaas-ch"
+date: 2025-01-06T05:38:02+08:00
+descrption: "AI客服AaaS-CH"
+draft: false
+display: true
+type: "video"
+---
+
+{{< youtube k82RwXqZHY8 >}}

+ 14 - 0
content/news/video-choozmo-exhibitions-and-awards-introduction.md

@@ -0,0 +1,14 @@
+---
+title: "ChoozMo Exhibition and Award Introduction"
+tags: ["AI"]
+categories: ["AI","Video News"]
+image: "https://img.youtube.com/vi/HSel-29VDUQ/maxresdefault.jpg"
+url: "/news/video-choozmo-exhibitions-and-awards-introduction"
+date: 2025-01-06T00:38:02+08:00
+descrption: "ChoozMo Exhibition and Award Introduction"
+draft: false
+display: true
+type: "video"
+---
+
+{{< youtube HSel-29VDUQ >}}

+ 14 - 0
content/news/video-saas-online-ai-video-presenter-creation.md

@@ -0,0 +1,14 @@
+---
+title: "SaaS Online AI Anchor Video Production"
+tags: ["AI"]
+categories: ["AI","Video News"]
+image: "https://img.youtube.com/vi/cZubggAEG2g/maxresdefault.jpg"
+url: "/news/video-saas-online-ai-video-presenter-creation"
+date: 2025-03-26T00:38:02+08:00
+descrption: "SaaS Online AI Anchor Video Production"
+draft: false
+display: true
+type: "main"
+---
+
+{{< youtube cZubggAEG2g >}}

+ 175 - 0
content/news/viral-flux-ai-images-look-terrifyingly-real.md

@@ -0,0 +1,175 @@
+---
+title: "Viral Flux AI images look terrifyingly real"
+tags: ["ai"]
+categories: ["ai"]
+image: "https://cdn.mos.cms.futurecdn.net/NwTB3Y5Tzk27Xj2DBiTgJi-1200-80.jpg"
+url: "/news/viral-flux-ai-images-look-terrifyingly-real"
+date: 2024-08-09T00:10:44+08:00
+descrption: "Viral Flux AI images look terrifyingly real"
+draft: false
+display: true
+type: "post"
+---
+
+  ## Viral Flux AI images look terrifyingly real
+ 
+  ![img](https://cdn.mos.cms.futurecdn.net/NwTB3Y5Tzk27Xj2DBiTgJi-1200-80.jpg)] 
+ 
+ While AI art has proliferated over the past two years, the best AI image generators have remained largely the same. Adobe Firefly, Midjourney, DALL-E and Stable Diffusion have been fighting it out, which each one bringing new advances in each update.
+ 
+ But it seems Flux, a relatively new open-source AI-image generator, may be about to take the crown, at least when it comes to realism. Early experimenters running the model on their own devices have paired it XLabs' Lora, a fine-tuning script that appears to add extra detail. The results are almost indistinguishable from photographs at a quick glance.
+ 
+ On closer inspection, the images can still be identified as AI-generated fairly easily. Text is the big giveaway, particularly small text on things like the lanyard and microphone in the image above. Patterns and textures can also look strange when you look at them, and elements can be out of proportion. That aside, at first glance, the images going viral on social media look like normal photos of normal people (I'm not sure who does a Ted Talk in a swimsuit, but that's by the by).
+ 
+ What is Flux AI image generator?
+ 
+ Created by the startup Black Forest Labs, Flux AI image generator is being billed an heir to Stable Diffusion because it's open-source. That means it's code is freely available and anybody can tinker with it, modify the model and incorporate it into their own generators. Users can run Flux locally if they have a good enough computer, but it's also available on multi-model platforms like Poe and Nightcafe.
+ 
+ There are actually three versions of Flux.01. There's a Pro version available with a commercial licence, then there's the mid-weight model Dev and a faster model Schnell (Black Forest Labs are based in Germany as you might expect).
+ 
+ While Ideogram impressed many when it burst onto to the scene a few month ago, Flux looks to now be the biggest competition for Midjourney in term of photorealism. The model itself appears to produce very realistic results, although skin textures can be less convincing and more plastic looking. But some users running have been getting terrifyingly realistic results when combining Flux with Lora, a fine-tuning script for photorealism made by XLabs.
+ 
+ The stunning realism of the images above have quickly turned them viral. They also have many people wondering what the benefits are, other than providing a bit of fun for machine learning hobbyists. The ability to create realistic images of non-real people could be a game changer for stock photography and advertising. There are already many smaller businesses and brands using AI images for social media pieces. But the risk of AI images being used to commit scams or create fake news is more terrifying than ever.
+ 
+  ![img](https://www.geeky-gadgets.com/wp-content/uploads/2024/08/FLUX-AI-image-generator-Black-Forest-Labs.jpg)] 
+ 
+ FLUX.1, a innovative AI image generator developed by Black Forest Labs, is set to make waves in the field of artificial intelligence. Created by a team of seasoned experts with extensive experience in AI image and video generation, including notable contributions to the renowned Stable Diffusion project, FLUX.1 offers a trio of distinct models tailored to cater to a wide range of user needs. As an open-source tool, it openly invites community-driven improvements and fine-tuning, fostering a collaborative environment that encourages continuous enhancement and innovation.
+ 
+ FLUX.1 AI Image Generator
+ 
+ The development team behind FLUX.1 brings to the table a wealth of expertise and knowledge in AI technologies. Their invaluable contributions to groundbreaking projects such as Stable Diffusion, VQ-GAN, and latent diffusion serve as a testament to their prowess, ensuring that FLUX.1 is built upon a robust foundation of advanced AI techniques. This solid groundwork positions FLUX.1 as a formidable contender in the realm of AI image generation.
+ 
+ Key Takeaways : FLUX.1 is an innovative AI image generation tool developed by Black Forest Labs.
+ 
+ The development team has extensive experience in AI technologies, contributing to projects like Stable Diffusion and VQ-GAN.
+ 
+ FLUX.1 offers three model variants: Schnell (fastest, for local development), Dev (balanced, for non-commercial use), and Pro (top-tier, for enterprise solutions).
+ 
+ Accessible on popular AI platforms like Hugging Face and Glyph, with free usage options.
+ 
+ Strengths include realism in generated images, high-quality text generation, and content flexibility.
+ 
+ Limitations include less effective illustration quality and weaker prompt adherence compared to DALL-E 3.
+ 
+ Future developments include expanding capabilities into text-to-video generation.
+ 
+ Open-source nature allows for community-driven improvements and continuous enhancement.
+ 
+ Comparison with other tools: FLUX.1 offers comparable realism to MidJourney, unique advantages over DALL-E 3, and more uncensored options than Stable Diffusion.
+ 
+ Potential for growth with the possibility of surpassing current leading tools in various aspects.
+ 
+ FLUX.1 is poised to become a leading tool in the AI image generation field due to its strengths and continuous innovation.
+ 
+ One of the standout features of FLUX.1 is its availability in three carefully crafted variants, each designed to cater to specific user requirements:
+ 
+ FLUX.1 Schnell : As the fastest model in the lineup, FLUX.1 Schnell is the ideal choice for local development and personal use. Its open-source nature makes it highly accessible, allowing individual users to freely experiment, customize, and adapt the tool to suit their unique needs.
+ 
+ : As the fastest model in the lineup, FLUX.1 Schnell is the ideal choice for local development and personal use. Its open-source nature makes it highly accessible, allowing individual users to freely experiment, customize, and adapt the tool to suit their unique needs. FLUX.1 Dev : Striking a perfect balance between speed and capability, FLUX.1 Dev serves as the middle-tier option. It is particularly well-suited for non-commercial use, providing users with a powerful tool that can handle a wide range of tasks efficiently.
+ 
+ : Striking a perfect balance between speed and capability, FLUX.1 Dev serves as the middle-tier option. It is particularly well-suited for non-commercial use, providing users with a powerful tool that can handle a wide range of tasks efficiently. FLUX.1 Pro: The crown jewel of the FLUX.1 family, FLUX.1 Pro is the top-tier model designed specifically for enterprise solutions. Boasting state-of-the-art performance, it is equipped to tackle even the most demanding applications with unparalleled precision and efficiency.
+ 
+ FLUX.1 AI
+ 
+ Accessibility is a key priority for FLUX.1, which is why it is readily available on popular AI platforms such as Hugging Face. These platforms offer free usage, making it incredibly easy for users to explore and experiment with the tool without any financial barriers. This accessibility opens up a world of possibilities for individuals and organizations alike, allowing them to harness the power of AI image generation effortlessly.
+ 
+ FLUX.1 truly shines in several crucial areas. Its ability to generate highly realistic images is particularly noteworthy, as it is essential for applications that demand visual authenticity. Whether it’s creating lifelike portraits, generating convincing product images, or simulating real-world scenarios, FLUX.1 delivers results that are virtually indistinguishable from reality.
+ 
+ In addition to its impressive image generation capabilities, FLUX.1 also excels in high-quality text generation. It can produce coherent and contextually appropriate text, enhancing its versatility and making it a valuable tool for a wide range of applications, from content creation to natural language processing.
+ 
+ Another standout feature of FLUX.1 is its remarkable content flexibility. It can generate a diverse array of content, including logos, memes, and more. This adaptability sets it apart from other AI image generation tools, as it can cater to a broader spectrum of user needs and creative endeavors.
+ 
+ Here are a selection of other articles from our extensive library of content you may find of interest on the subject of AI image generator :
+ 
+ While FLUX.1 features numerous strengths, it is important to acknowledge its limitations. One area where it currently falls short is in the creation of illustrations. Compared to other AI tools specifically designed for illustrative purposes, FLUX.1’s output may not be as refined or stylistically consistent. However, given the open-source nature of the tool and the active community involvement, it is likely that this aspect will see significant improvements over time.
+ 
+ Another area where FLUX.1 has room for growth is in its adherence to prompts. While it performs well in generating images based on textual descriptions, it may not always capture the nuances and specifics as accurately as some other tools, such as DALL-E 3. This can be a consideration for applications that require high levels of precision and control over the generated output.
+ 
+ Looking ahead, Black Forest Labs has ambitious plans to expand FLUX.1’s capabilities even further. One exciting development on the horizon is the integration of text-to-video generation. This groundbreaking feature could transform the way content is created, opening up a whole new realm of possibilities for storytelling, animation, and multimedia production.
+ 
+ The open-source nature of FLUX.1 is a significant advantage that sets it apart from many other AI tools. By allowing users to contribute to its development, fine-tune its performance, and expand its capabilities, FLUX.1 fosters a vibrant community of innovators and enthusiasts. This collaborative approach ensures that the tool remains at the forefront of AI image generation, constantly evolving and adapting to meet the ever-changing needs of its users. When compared to other leading AI image generation tools, FLUX.1 holds its own and even surpasses them in certain aspects:
+ 
+ While MidJourney is renowned for its ability to generate highly realistic images, FLUX.1 offers comparable quality while providing additional flexibility and customization options.
+ 
+ DALL-E 3 may have an edge in terms of prompt adherence, but FLUX.1’s open-source nature and community-driven improvements give it a unique advantage in terms of adaptability and potential for growth.
+ 
+ Compared to Stable Diffusion, FLUX.1 offers a wider range of uncensored and flexible options, making it a compelling choice for users who value creative freedom and versatility.
+ 
+ As FLUX.1 continues to evolve and mature, it is poised to become a dominant force in the AI image generation landscape. With its strong foundation, experienced development team, and active community support, it has the potential to surpass current leading tools in various aspects. The future looks bright for FLUX.1, and it will be exciting to witness its growth and the innovative applications it enables.
+ 
+ In conclusion, FLUX.1 is a promising new AI image generator that brings a fresh perspective and immense potential to the field. Its strengths in generating realistic images, high-quality text, and diverse content make it a versatile tool suitable for a wide range of applications. While it currently has some limitations in areas such as illustration quality and prompt adherence, its open-source nature and dedicated community ensure that it will continue to improve and innovate. As FLUX.1 evolves and expands its capabilities, it is well-positioned to become a leading player in the AI image generation space, empowering users to push the boundaries of creativity and unlock new possibilities in visual communication.
+ 
+ Video & Image Credit: Source
+ 
+ 
+ 
+ Latest Geeky Gadgets Deals
+ 
+ Some of our articles include affiliate links. If you buy something through one of these links, Geeky Gadgets may earn an affiliate commission. Learn about our Disclosure Policy
+ 
+  ![img](https://cdn.mos.cms.futurecdn.net/vS6tZjnwc5cQx59uQXTJ6Z-1200-80.png)] 
+ 
+ A new AI image generator named Flux.1 has burst onto the scene and is rapidly accruing kudos for its high-end results and the fact that it's an open-source model. Flux was built by Black Forest Labs, whose founders were previously at Stability AI, the creator of the popular Stable Diffusion line of AI image models.
+ 
+ Some are calling the Flux stable of models the successor to Stable Diffusion and possibly a major game-changer for accessible, high-quality generative AI tools.
+ 
+ There are three versions of Flux.1: Pro, Dev, and Schnell, in decreasing order of size. The Pro version is designed for commercial use, with companies already incorporating it to offer generative AI image services to their subscribers. The Dev and Schnell versions are optimized for different levels of performance and speed.
+ 
+ What sets Flux apart from Midjourney, Stable Diffusion, and many of its competitors? Most notably, the two smaller models can run on reasonably good hardware, such as high-performance laptops. This makes it more accessible to a broader range of users, including hobbyists, developers, and small businesses who may not have the resources to invest in more expensive, proprietary tools. It also means you don't have to rely on internet access or cloud storage to run Flux. And, while Midjourney has been praised for its ability to create highly detailed and visually appealing images, Flux claims to offer some distinct advantages, particularly in rendering human figures. Black Forest Labs is now working on adding a text-to-video model to its portfolio.
+ 
+ "Deeply rooted in the generative AI research community, our mission is to develop and advance state-of-the-art generative deep learning models for media such as images and videos, and to push the boundaries of creativity, efficiency and diversity. We believe that generative AI will be a fundamental building block of all future technologies," Black Forest Labs explained in its blog. "By making our models available to a wide audience, we want to bring its benefits to everyone, educate the public and enhance trust in the safety of these models. We are determined to build the industry standard for generative media."
+ 
+ We are excited to announce the launch of Black Forest Labs. Our mission is to develop and advance state-of-the-art generative deep learning models for media and to push the boundaries of creativity, efficiency and diversity. pic.twitter.com/ilcWvJgmsXAugust 1, 2024
+ 
+ How to get and use Flux
+ 
+ For those interested in exploring Flux, there are several ways to access and use the model. If your computer is good enough, you can download and run Flux.1 locally. Plus, Flux is an open-source model and compatible with multi-model platforms, which expands its availability significantly.
+ 
+ AI image platform NightCafe has already integrated the Flux.1 model, allowing users to compare its outputs directly with those from other models like Ideogram and Stable Diffusion 3.
+ 
+ Get daily insight, inspiration and deals in your inbox Sign up for breaking news, reviews, opinion, top tech deals, and more. Contact me with news and offers from other Future brands Receive email from us on behalf of our trusted partners or sponsors
+ 
+ Similarly, Poe offers a chatbot-style interface for generating images using Flux.1. For those a little more technical, you can also access Flux.1 through Hugging Face and other hubs of open-source AI models.
+ 
+  ![img](https://cdn.mos.cms.futurecdn.net/zwBqBZRAiyq6mxunh86npd-1200-80.png)] 
+ 
+ New AI products and services come in two ways; like a bolt of lightning with no warning, or after months of constant hype. Flux, by startup Black Forest Labs, was the former.
+ 
+ The AI image generation model is being dubbed the rightful heir to Stable Diffusion and it quickly went viral after its release with direct comparisons to market leader Midjourney.
+ 
+ The difference between Flux and Midjourney is that Flux is open-source and can run on a reasonably good laptop. This means it is, or will, also be available on many of the same multi-model platforms like Poe, Nightcafe and FreePik as Stable Diffusion.
+ 
+ I’ve been using it and my initial impressions are that in some areas it is better than Midjourney, especially around rendering people, but its skin textures aren’t as good as Midjourney v6.1.
+ 
+ What is Flux and where did it come from?
+ 
+ Image generated using Flux.01 running on a gaming laptop (Image credit: Flux AI/Future generated)
+ 
+ Flux came from AI startup Black Forest Labs. This new company was founded by some of the people responsible for most modern AI image generation technologies.
+ 
+ The German-based company is led by Robin Rombach, Andreas Blattmann and Dominik Lorenz, all former engineers at Stability AI, along with other leading figures in the development of diffusion-based AI models. This is the technology that also powers many AI video tools.
+ 
+ There are three versions of Flux.01 currently available, all text-to-image models. The first is a Pro version with a commercial license and is mainly used by companies like FreePik to offer its subscribers access to generative AI image technology.
+ 
+ Sign up to get the BEST of Tom's Guide direct to your inbox. Get instant access to breaking news, the hottest reviews, great deals and helpful tips. Contact me with news and offers from other Future brands Receive email from us on behalf of our trusted partners or sponsors
+ 
+ The next two are Dev and Schnell. These are the mid-weight and fast models and in my tests — running on a laptop with an RTX 4090 — they outperform Midjourney, DALL-E and even Ideogram in adherence to the prompt, image quality and text rendering on an image.
+ 
+ The company is also working on a text-to-video model that it promises will offer high-quality output and be available open-source. Branding it: “State-of-the-Art Text to Video for all.”
+ 
+ Where can I use Flux today?
+ 
+ We are excited to announce the launch of Black Forest Labs. Our mission is to develop and advance state-of-the-art generative deep learning models for media and to push the boundaries of creativity, efficiency and diversity. pic.twitter.com/ilcWvJgmsXAugust 1, 2024
+ 
+ If you have a well-equipped laptop you can download and run Flux.01 locally. There are some easy ways to do this including by using the Pinokio launcher. This makes it relatively trivial to install and run AI models with a couple of clicks and is free to use. It is a large file though.
+ 
+ However, if you’re machine isn’t up to the job there are several websites already offering access to Flux.01 and in some cases, this includes the largest commercial Pro model.
+ 
+ NightCafe, which is one of my favorite AI image platforms, already has access to the model and you could quickly compare that o images from other tools like Ideogram and Stable Diffusion 3.
+ 
+ Poe, the AI model platform, has access to Flux.01 and lets you generate the images in a chatbot-style format similar to creating pictures using tools like ChatGPT and DALL-E.
+ 
+ You can also get access through platforms more typically targeted at developers including Based Labs, Hugging Face and Fal.ai. FreePik, one of the largest AI image platforms on the market says it is also working to bring Flux to its site.
+ 
+ 
+

+ 49 - 0
content/news/virtual-humans-help-spur-e-commerce.md

@@ -0,0 +1,49 @@
+---
+title: "Virtual Humans Help Spur E-Commerce"
+tags: ["AI"]
+categories: ["AI"]
+image: "https://images.hhh.com.tw/uploads/_had/adlogo_17574_1724919264.webp"
+url: "/news/virtual-humans-help-spur-e-commerce"
+date: 2025-03-26T00:25:21+08:00
+descrption: "Virtual Humans Help Spur E-Commerce"
+draft: false
+display: true
+type: "post"
+---
+
+ # Virtual Characters Capable of 24/7 Live Streaming Save Businesses Significant Costs
+ 
+[ChoozMo](https://ai.choozmo.com)'s [AaaS](https://ai.choozmo.com/blog/what-is-choozmo-aaas/) technology can be used to quickly create virtual characters.
+In April, the AI digital avatar of Liu Qiangdong, founder and chairman of Chinese e-commerce giant JD.com, appeared in two of the company's live streaming sessions, promoting various products such as meat, cooking oil, eggs, milk, air conditioners, and food.
+Powered by JD.com’s large language model ChatRhino, the virtual avatar almost perfectly replicated Liu’s facial expressions, body language, gestures, voice, and accent, even capturing the subtlest finger movements.
+Nicknamed “Purchasing and Sales Manager Dong Ge,” Liu’s avatar garnered over 20 million views within the first hour and achieved RMB 50 million (USD 6.9 million) in sales throughout the live broadcast.
+Liu’s virtual replica even shared his personal thoughts on healthy eating, cooking experiences, fitness, and exercise methods.
+JD.com's LLM technology is equipped with 50,000 hours of voice data, enabling digital avatars to intelligently and dynamically adapt to various live streaming styles and answer 70% of frequently asked questions during broadcasts.
+Virtual hosts provide a glimpse into China’s booming e-commerce industry, where AI-driven virtual hosts introduce various products and stimulate sales. Chinese online retailers and tech companies are ramping up efforts to promote digital humans in live streaming events.
+To date, JD.com’s AI virtual hosts have promoted over 4,000 brands, helping merchants increase their off-season order conversion rate by 30%, reduce live streaming costs, enhance operational efficiency, and optimize user experience.
+JD.com added that digital avatars achieve an accuracy rate of 90% when providing personalized product recommendations based on customer prompts, while also reducing live streaming costs by 90% compared to real hosts.
+Recently, the company announced an investment of RMB 1 billion in video content creation, aiming to improve users’ online shopping experience through short videos and live streaming, creating new growth opportunities for brands and merchants.
+According to iiMedia Research, China's live-streaming e-commerce industry revenue reached RMB 1.7 trillion last year, marking a 16% year-on-year increase. By 2025, this figure is expected to reach RMB 2.14 trillion.
+An industry report released by QbitAI, an industry service platform focusing on cutting-edge technologies like AI, predicts that by 2030, China’s virtual human market will reach RMB 270 billion.
+Zhang Yi, CEO and chief analyst of iiMedia Research, stated that the application of virtual hosts in live-streaming e-commerce is expected to grow rapidly this year, driven by user demand, AI advancements, and policy support.
+Zhang noted that the main challenge is how to make virtual hosts interact better with users during live broadcasts and more accurately understand their needs.
+Other major e-commerce platforms are also accelerating the deployment of digital humans in live streaming events. Alibaba’s B2C marketplace Tmall has introduced AI virtual models to provide users with a more personalized shopping experience.
+Alibaba’s Taobao utilizes digital human live streaming technology to offer real-time marketing services for merchants. Pinduoduo Holdings has launched a series of product promotions featuring digital human streamers, attracting a large number of users.
+Global consultancy Forrester stated that an increasing number of B2C brands are using virtual hosts to attract digitally savvy and novelty-seeking young consumers because they are more cost-effective than real hosts and eliminate the risk of celebrity scandals that could harm brand image.
+Qianxun Holdings, one of China’s top live-streaming companies, has launched AI hosting services and an all-in-one AI live-streaming service platform.
+Tao Yadong, partner of Qianxun Holdings and CEO of Qianyu Intelligence, stated that running a traditional live streaming room with a dozen workers and equipment typically costs between RMB 150,000 to 250,000 per month. In contrast, brands can operate a virtual live streaming room hosted by a virtual anchor for only a few thousand yuan.
+He noted that virtual hosts outperform human streamers in total merchandise volume, average watch time, viewership, and transaction rates.
+"However, under current technological conditions, digital hosts cannot completely replace humans because they struggle to build trust with fans," Tao added.
+Ping Xiaoli, Vice President of Chinese tech giant Baidu and General Manager of Baidu's e-commerce business, stated that compared to humans, digital avatars' greatest advantage is significantly lowering merchants’ live streaming operational costs while working 24 hours a day—even during bathroom breaks—boosting product sales.
+Baidu has launched the Xiling digital avatar platform, offering comprehensive services for creating and operating virtual hosts, virtual celebrities, and virtual brand ambassadors across sectors such as broadcasting, television, online media, finance, and retail.
+"More and more brands want to use virtual characters in live streaming and other marketing activities, which will help businesses cut costs by at least 50% by reducing spending on physical live-streaming venues, hardware equipment, and hiring real hosts," said Li Shiyan, head of Baidu’s Digital Humans and Robotics Department.
+However, Li pointed out that the virtual human industry is still in its early stages and faces challenges such as producing low-cost digital assets and digital content and making virtual humans interact more naturally with real people.
+Mo Daiqing, a senior analyst at the Internet Economy Research Institute, stated that using virtual hosts in live streaming can provide users with a sense of novelty while allowing brands to attract new consumers through this innovative approach.
+Mo emphasized that AI-powered digital live streamers help improve operational efficiency, enhance the consumer shopping experience, and drive the development of the live-streaming e-commerce industry.
+Furthermore, virtual humans play a key role in handling tedious, repetitive tasks, allowing human hosts to dedicate more time to creative work. However, Mo added that they will not entirely replace real human hosts.
+Pan Helin, a member of the Expert Committee on Information and Communication Economics at the Ministry of Industry and Information Technology, expressed optimism about the commercial prospects of virtual humans in e-commerce live streaming.
+Pan called for improvements in 3D modeling, rendering, and motion capture technologies to advance China’s virtual human industry.
+With advancements in AI technology, digital avatars that closely resemble real humans in appearance and behavior are not only serving the live-streaming e-commerce sector but are also being widely used in entertainment, education, fashion, and other fields.
+Chinese AI pioneers like Xiaoice, SenseTime, and tech giant Huawei have joined the digital human space. For example, Xiaoice developed the first virtual employee, Cui Xiaopan, for Chinese real estate developer Vanke. The digital human is responsible for reminding employees to pay company bills on time and collecting due payments.
+Yu Jianing, Executive Director of the Virtual Reality Industry Committee of the China Mobile Communications Association, stated, "Although the digital avatar field is still in its infancy, the appearance, gestures, and movements of digital humans will become more refined and closer to real humans."
+Yu noted that the accelerated adoption of 5G and the development of next-generation wireless technology, 6G, will drive the growth of the digital human industry. He added that with AI advancements, virtual humans will become more intelligent, capable of providing personalized feedback based on real-time information.

+ 67 - 0
content/news/what-is-an-ai-anchor.md

@@ -0,0 +1,67 @@
+---
+title: "What is an AI Anchor?"
+tags: ["starups","choozmo"]
+categories: ["news"]
+image: "https://ai.choozmo.com/imgs/home/%E4%BA%9E%E9%8C%A6%E8%B3%BD-07.webp"
+url: "/news/what-is-an-ai-anchor"
+date: 2025-03-26T00:26:10+08:00
+descrption: "What is an AI Anchor?"
+draft: false
+display: true
+type: "post"
+---
+
+## The Emergence of AI News Anchors: A Milestone in the News Industry
+The rise of AI news anchors marks a significant milestone in the news industry. By utilizing customizable avatars and AI-generated videos, news networks can quickly deliver breaking news, reduce production costs, and ensure higher accuracy. AI news anchors complement human journalists, revolutionizing the efficiency and effectiveness of news broadcasting.
+
+## What is an AI Anchor?
+An AI anchor refers to a virtual news anchor created and operated using artificial intelligence (AI) technology. This emerging media format combines AI technology, speech synthesis, virtual character design, and modern digital media platforms, enabling these virtual anchors to host programs, deliver news reports, and even conduct live game broadcasts just like human anchors.
+
+Key features and functionalities of AI anchors include:
+- Speech Synthesis: AI anchors utilize advanced speech synthesis technology to produce human-like voices.
+- Facial Expression Synthesis: Some AI anchors feature virtual characters whose facial expressions and movements are generated using special algorithms or animation techniques for a more lifelike appearance.
+- Automated Script Generation: AI anchors can generate scripts based on predefined topics or preset themes, enabling automated conversations and reporting.
+- Real-time Interaction: Certain AI anchors can interact with audiences in real-time, answer questions, engage in conversations, and even participate in special interactive activities.
+- Multilingual Capabilities: With advancements in speech synthesis, some AI anchors can deliver content in multiple languages, expanding their audience reach.
+- 24/7 Operation: Unlike human anchors who are bound by time constraints, AI anchors can operate continuously around the clock without requiring breaks.
+
+AI anchors have started to appear on digital platforms and have gained attention in specific applications. However, this technology is still evolving and may spark discussions on ethical and social concerns regarding the boundary between virtual and real-world content.
+
+## AI News Anchors with Customizable Avatars
+
+AI news anchors, powered by customizable avatars and AI video generation, have an unparalleled ability to deliver the fastest breaking news updates in the world. By leveraging personalized digital personas, AI systems can create lifelike virtual news presenters that convey information with engaging visuals and human-like expressions.
+
+With AI video generation, these virtual news anchors can instantly analyze vast amounts of data from multiple sources, providing real-time updates on developing stories. The integration of customizable avatars and AI-generated video enables news networks to deliver breaking news at unprecedented speed, keeping audiences informed and engaged.
+
+In emergencies such as severe weather events, AI anchors can generate new video reports and deliver breaking news faster than traditional broadcasters.
+
+With an AI digital twin, scripts are instantly converted into news videos, saving at least 10 to 20 minutes for breaking news coverage.
+
+## Cost-Effective News Video Production Using AI Generators
+
+The integration of customizable avatars and AI video generators in news production offers significant cost efficiency. Through personalized avatars, news networks can create virtual news presenters without the need for expensive human resources such as anchors, reporters, or production staff.
+
+These AI-powered avatars are available 24/7 without requiring breaks or shift rotations, significantly reducing production costs. Furthermore, AI-generated videos can automate repetitive tasks such as script reading, teleprompter operation, and video editing, streamlining the production process and optimizing resource allocation.
+
+The combination of customizable avatars and AI video generators allows news organizations to save costs and allocate resources to other critical areas of news production.
+
+By implementing AI anchors, a news station is expected to save approximately $400,000 per year:
+
+- Backup news anchor: $80,000
+- Three to four film directors and crew: $200,000
+- Filming equipment: $120,000
+- Studio space: Reduced opportunity cost for breaking news production
+
+## Error-Free Information Delivery
+Even the most skilled human anchors may mispronounce words or react unexpectedly in live situations. However, AI news anchors excel in delivering information with absolute precision.
+
+Unlike human anchors who may accidentally mispronounce words, stumble over scripts, or convey incorrect information, AI anchors eliminate these concerns. With deep learning algorithms and advanced speech synthesis technology, AI news anchors deliver news with flawless pronunciation, clarity, and consistency. This ensures that audiences receive accurate information reliably, enhancing trust in news networks and minimizing the risk of misinformation.
+
+## ChoozMo AI Anchors
+
+Since 2020, ChoozMo has been leveraging generative AI technology to create AI news anchors and offer customized services. With support for over 20 languages, including Taiwanese, Hakka, and Indigenous languages, ChoozMo provides an AI-generated video platform (AIGV) using Generative AI and Deep Learning technologies to build AI character models.
+
+Unlike competing products in the market, our latest fifth-generation AI anchors feature advanced rendering technology that allows them to switch appearances based on different contexts in a short time, reducing video production costs and barriers.
+
+Our key advantages include customized modeling, rapid avatar generation, diverse application scenarios, and multilingual capabilities. We are committed to helping clients mass-produce high-quality video content efficiently, boosting traffic and engagement while staying ahead of digital marketing trends.
+

+ 111 - 0
content/news/what-is-gemini-live.md

@@ -0,0 +1,111 @@
+---
+title: "What is Gemini Live"
+tags: ["ai"]
+categories: ["ai"]
+image: "https://i0.wp.com/9to5google.com/wp-content/uploads/sites/4/2024/08/Gemini-Live-on-Pixel-9-Pro.jpg?resize=1200%2C628&quality=82&strip=all&ssl=1"
+url: "/news/what-is-gemini-live"
+date: 2024-08-15T00:54:25+08:00
+descrption: "What is Gemini Live"
+draft: false
+display: true
+type: "featured"
+---
+
+  ## Gemini Live & new voices rolling out on Pixel, Samsung
+ 
+  ![img](https://i0.wp.com/9to5google.com/wp-content/uploads/sites/4/2024/08/Gemini-Live-on-Pixel-9-Pro.jpg?resize=1200%2C628&quality=82&strip=all&ssl=1)] 
+ 
+ As announced during Made by Google 2024, Gemini Live is rolling out and we’re seeing wider availability on Pixel and other Android phones today.
+ 
+ The Gemini Live icon is a waveform badged with a sparkle that appears in the bottom-right corner of the Gemini overlay and fullscreen app.
+ 
+ Hi, I’m Gemini. We’re about to go live where you can explore complex topics or ideas just by talking.
+ 
+ An introductory prompt explains how you can “Hold” or “End” the conversation with the big buttons at the bottom, or say “stop.” Right out of the gate, Google says Gemini Extensions aren’t available in Live yet, but they are coming later to let you control your phone and access other apps (Gmail, YouTube, etc.) via voice.
+ 
+ The fullscreen Gemini Live UI is quite clean, but you can exit the app to go about using your phone or lock/turn off the screen to keep talking. In that case, you get a “Live with Gemini” notification that notes how the “mic is on” with an “End Live mode” button.
+ 
+ After you end a conversation, a text transcript showing your prompts and Gemini’s responses will appear. It appears in the “Recent” history list like every other text chat. You can restart a conversation by tapping the Live button in the corner.
+ 
+ In Gemini Settings, you have a new toggle for “Interrupt Live responses” — an aspect Google is particularly proud of to let users interject — and “Gemini’s voice” to pick from 10 options that are fittingly star and space-themed (thanks Omega192). This new voice is available outside of Live as well.
+ 
+ * Nova: Calm • Mid-range voice
+ * Ursa: Engaged • Mid-range voice
+ * Vega: Bright • Higher voice
+ * Pegasus: Engaged • Deeper voice
+ * Orbit: Energetic • Deeper voice
+ * Lyra: Bright • Higher voice
+ * Orion: Bright • Deeper voice
+ * Dipper: Engaged • Deeper voice
+ * Eclipse: Energetic • Mid-range voice
+ * Capella: British Accent • Higher voice
+ 
+ So far, we’re seeing this on Pixel and Samsung devices. Gemini Live is widely rolling out to Android underway. It requires a Gemini Advanced subscription and works with English globally.
+ 
+  ![img](https://storage.googleapis.com/gweb-uniblog-publish-prod/images/MBG_Gemini_SocialShare.width-1300.jpg)] 
+ 
+ For years, we’ve relied on digital assistants to set timers, play music or control our smart homes. This technology has made it easier to get things done and saved valuable minutes each day.
+ 
+ Now with generative AI, we can provide a whole new type of help for complex tasks that can save you hours. With Gemini, we’re reimagining what it means for a personal assistant to be truly helpful. Gemini is evolving to provide AI-powered mobile assistance that will offer a new level of help — all while being more natural, conversational and intuitive.
+ 
+ Learn more about the new Gemini features, which will be available on both Android and iOS.
+ 
+  ![img](https://cdn.vox-cdn.com/thumbor/u0d7p3jI8uUk-Pel_-elWKAXUso=/0x0:2050x1153/1200x628/filters:focal(1025x577:1026x578)/cdn.vox-cdn.com/uploads/chorus_asset/file/25570938/Gemini_header_image.png)] 
+ 
+ 
+ 
+ [ChoozMo](https://ai.choozmo.com) is a  leading Generative AI application company in Taiwan, providing AI news anchor services for major Taiwanese TV stations, including SET iNews, CTS, Hakka TV.  Developed LLM-based AI customer service for Taipei 101, supporting Chinese, English, Japanese, and Korean. Additionally, they are developing LLM in the ESG field.
+ 
+ 
+ Google is rolling out a new voice chat mode for Gemini, called Gemini Live, the company announced at its Pixel 9 event today. Available for Gemini Advanced subscribers, it works a lot like ChatGPT’s voice chat feature, with multiple voices to choose from and the ability to speak conversationally, even to the point of interrupting it without tapping a button.
+ 
+ Google says that conversations with Gemini Live can be “free-flowing,” so you can do things like interrupt an answer mid-sentence or pause the conversation and come back to it later. Gemini Live will also work in the background or when your phone is locked. Google first announced that Gemini Live was coming during its I/O developer conference earlier this year, where it also said Gemini Live would be able to interpret video in real time.
+ 
+ Gemini Live adds voice chatting to Google’s AI assistant. GIF: Google
+ 
+ Google also has 10 new Gemini voices for users to pick from, with names like Ursa and Dipper. The feature has started rolling out today, in English only, for Android devices. The company says it will come to iOS and get more languages “in the coming weeks.”
+ 
+ In addition to Gemini Live, Google announced other features for its AI assistant, including new extensions coming later on, for apps like Keep, Tasks, Utilities, and YouTube Music. Gemini is also gaining awareness of the context of your screen, similar to AI features Apple announced at WWDC this year. After users tap “Ask about this screen” or “Ask about this video,” Google says Gemini can give you information, including pulling out details like destinations from travel videos to add to Google Maps.
+ 
+  ![img](https://gizmodo.com/app/uploads/2024/08/Gemini-on-Android.png)] 
+ 
+ It was inevitable. With Gemini taking form in all parts of Google’s ecosystem, it was apparent that Android would eventually follow suit. Alongside the new family of Pixel hardware, Google announced it is doubling down on its promise of AI by introducing a handful of new Gemini-enabled features, including Gemini Live, which lets you chat with it as if it’s right in your ear. Google calls this the newly rebuilt “assistant experience with Gemini.”
+ 
+ Android users are getting a new Gemini overlay. Like the Assistant before it, Gemini can pop in at any time you need with the long press of the power button and offer context about what’s on the screen. This works with several different apps in varying ways. Google’s examples include asking for additional information about what you’re watching on a YouTube video. Or, use it for image generation in an app like Google Messages. Circle to Search also gets a small feature bump on most Android devices. You can select and share material right as you interact with it.
+ 
+ Then, there’s Gemini Live, which launches today. This experience feels the most like the indie sleaze-era film Her, but the Google way and without the problematic ScarJo. You can speak “naturally” to Gemini, just as you would with another person, just like Joaquin Phoenix did with that earbud. And yes, the new Pixel Buds Pro 2 will enable this feature. Google says the new Gemini Live can understand intent, follow a train of thought, and do complex tasks the Assistant couldn’t do before. Gemini Live will even let you chat with it about life and track any ideas you might have. The company suggests using it to “brainstorm potential jobs” suited to your skill set. Let a machine help you figure out where you belong in the machine.
+ 
+ Gemini will be Google’s most widely available AI assistant, just as the Google Assistant was/is. It still exists in the Nest ecosystem to some extent, but Gemini is the replacement for what once was the Google Assistant as the handy helper. The only difference is the way you input it. Gemini relies more on imagery and direct prompting, and that’s not how we talk to Google Assistant. We trained ourselves to dial down the prompts once we realized digital assistants weren’t in it for the “casual conversation,” as we’d hoped. Perhaps Gemini will be that for Android.
+ 
+ 
+ 
+ Google promises Gemini is private. The ability requires your permission before accessing all parts of your life in the ecosystem, where it will then interact with your email and documents and serve as the assistant it’s billed to be. Some of Gemini’s Android features are processed in the cloud, while most “sensitive use cases” stay on-device with Gemini Nano.
+ 
+ If you’re down to using Gemini as Google intended, features like Gemini Live will start rolling out for Gemini Advanced subscribers. If you buy a Pixel 9 or Pixel 9 Pro, Google will include a year of the Google One AI Premium Plan as a treat, which includes free access to Gemini Advanced for a year.
+ 
+  ![img](https://www.zdnet.com/a/img/resize/8d114cee2b5705950c55d89f30c93b39ed510107/2024/08/10/01897171-701e-4e63-86bb-ddbb1328643f/dsc01696.jpg?auto=webp&fit=crop&height=675&width=1200)] 
+ 
+ Kerry Wan/ZDNET
+ 
+ One of generative AI's most useful (and needed) applications is enhancing voice assistants, which have remained relatively unchanged for years. Now, Google is making several upgrades to its voice assistant experience with the help of Gemini.
+ 
+ At the company's Made by Google event on Tuesday, Google made Gemini its default voice assistant, replacing Google Assistant with a smarter alternative that can be interrupted, is aware of your Google apps, and can even help answer questions about the contents of your screen.
+ 
+ Also: Google tops the Index with Gemini Live and Pixel's AI features
+ 
+ Arguably the biggest Gemini announcement is that Google made Gemini Live available three months after announcing it at Google I/O.
+ 
+ Gemini Live is an advanced voice assistant that can have human-like, multi-turn (or exchanges), verbal conversations on complex topics and even give you advice. For example, when speaking to the assistant, you can interrupt it mid-sentence, and the assistant will still understand you. You can also pick from multiple voices to enhance your conversation experience.
+ 
+ However, there's a catch: only Gemini Advanced subscribers on Android devices can access it. The feature is already being rolled out to both Samsung and Pixel devices.
+ 
+ As a bonus, Pixel Pro 9 users get access to the Google One AI Premium Plan, which includes access to Gemini Advanced -- and, therefore, Gemini Live -- at no additional cost for the first year. But for all other Android users, it's hard to say whether Gemini Live is worth paying $20 per month for a Google One AI Premium Plan. If you want to see whether the plan is worth it, you can try it for free via a one-month trial.
+ 
+ Also: How to try Google's new Gemini Live AI assistant for free
+ 
+ When announced at Google I/O, Gemini Live also had multimodal capabilities, which allowed it to use the camera to see the world around you and ingest that as context for answers. That feature, however, has not been released yet.
+ 
+ Gemini Live is a direct competitor to GPT-4o's new and improved Voice Mode, which has the same conversational and multimodal capabilities. Like Google, OpenAI has yet to make video and screen-sharing capabilities available.
+ 
+ 
+

+ 2 - 0
layouts/shortcodes/rawhtml.html

@@ -0,0 +1,2 @@
+<!-- raw html -->
+{{.Inner}}

+ 0 - 0
news_templates/.hugo_build.lock


+ 6 - 0
news_templates/archetypes/default.md

@@ -0,0 +1,6 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+draft: true
+---
+

+ 9 - 0
news_templates/config.toml

@@ -0,0 +1,9 @@
+baseURL = "https://news.similer.net/"
+languageCode = "en-us"
+title = "News"
+theme = "hugo-bootstrap-5"
+paginate = 10
+publishDir = "/tmp/news_similer_net"
+[taxonomies]
+  tag = 'tags'
+  category = 'categories'

+ 114 - 0
news_templates/content/news/1/1.md

@@ -0,0 +1,114 @@
+---
+title: "Tiktok: Soldier Poet King quiz"
+date: 2023-01-26T00:56:29+08:00
+draft: false
+display: true
+tags: ["tiktok"]
+categories: ["tiktok"]
+description: "-"
+url: "/blog/1"
+image: "https://www.messengernewspapers.co.uk/resources/images/16387991/?type=og-image"
+type: "main"
+---
+
+ ## What is the Soldier Poet King quiz going viral on TikTok?
+
+ ![img](https://www.messengernewspapers.co.uk/resources/images/16387991/?type=og-image)] 
+
+TikTok can never get enough of a quiz so here's how you can play the latest test to find out whether you are a soldier, poet or a king.
+
+The personality test has recently gained popularity on the social media platform with users flocking to share their results.
+
+Inspired by The Oh Hellos song of the same name, the quirky quiz was created by Nour (@oceanknives on TikTok and Instagram).
+
+So, the question is - are you a soldier, poet or king? Here's how you can find out.
+
+What is the TikTok viral 'Soldier, Poet, King' test? How to play
+
+All you need to do to take part in the popular game is head over to the Uquiz website.
+
+You'll then need to answer 20 multiple-choice questions to determine what category your personality falls into.
+
+The questions are quite personal and thought-provoking - ranging from the likes of 'What is duty?' to 'Where are you going when you die?'.
+
+Social media users have been sharing their answers on Twitter along with other platforms too.
+
+One person posted: "I did the stupid solder poet king quiz from tiktok and I didn't expect to be so violently called out at 2pm on a Tuesday."
+
+A second user commented: "I got a king on the stupid quiz they are talking about on TikTok about whether you're a king, poet or solider and getting the king is just so sad".
+
+A third chimed in: "Took the solder poet king quiz thing and. ouch."
+
+Another person shared: "is anyone else on the solider, poet, king side of tik tok right now ever since that new quiz dropped ?? it’s all over my fyp and i LOVE IT !! btw i’m the solider."
+
+It is not the first time that a quiz has gone viral on the video-sharing platform.
+
+Last year, TikTokers couldn't get enough of the silly but fun 'What Human Feeling Are You?' quiz.
+
+ ## The "Soldier, Poet, or King" Quiz Is Going Viral on TikTok — How Do You Take It?
+
+ ![img](https://media.distractify.com/brand-img/V5MsARHef/1200x628/poet-king-soldier-quiz-1674486718412.jpg)] 
+
+Home > Viral News > Influencers > TikTok Source: Getty Images The "Soldier, Poet, or King" Quiz Is Going Viral on TikTok — How Do You Take It? By Joseph Allen Jan. 23 2023, Published 10:24 a.m. ET
+
+Since its earliest days, TikTok has been popular in part for being a purveyor of trendy quizzes. These quizzes are often silly and occasionally completely pointless, but users have been sharing the results from these quizzes on their TikTok feeds ever since the app became popular. Most recently, a quiz began circulating that determines whether a TikTok user is a soldier, a poet, or a king.
+
+Article continues below advertisement
+
+What is the "soldier, poet, or king" quiz on TikTok?
+
+The "soldier, poet, or king" quiz has become enormously popular on TikTok as users share their results and react to whichever category they were given. The quiz was inspired by an Oh Hellos song called "Soldier, Poet, King," and can be taken on the Uquiz website here. All you have to do is type in your name and click on the button that says "start quiz."
+
+Source: Getty Images
+
+Article continues below advertisement
+
+From there, you'll be given a series of 20 questions designed to determine which of the three categories you most neatly fit into. The questions may seem a bit esoteric or strange and include things like "what is duty," or finish the sentence prompts like "the throne looks ..." When you've finished with all of the questions, you'll be given a definitive answer as to which of the three categories you belong to.
+
+taking the soldier poet king quiz has deeply unsettled me and i never thought that a uquiz result would be the reason i can’t sleep — bucky is writing ⚰️ (@buckyslibrary) January 23, 2023
+
+Article continues below advertisement
+
+Users have been sharing their results online, and some seem to be surprised by the category that they fall into. Of course, quizzes like this only mean as much as you let them, and this quiz might not mean anything at all. Still, those who have participated in it clearly seem to be getting something at least somewhat fulfilling out of the exercise.
+
+What do my quiz results actually mean?
+
+Even without taking the quiz, you probably have some intuitive sense of what each of these results means in the vaguest terms. More specifically, though, a king is someone who is bound by duty and honor and has a heavy burden of power and responsibility on their shoulders. A poet, by contrast, is more individualistic and solitary, an artistic type who has more power than they might realize.
+
+Article continues below advertisement
+
+Soldiers are in it for the glory, and while they might have some physical strength, they always run the risk of overdoing it in pursuit of their goals. These are just loose descriptions, but they may help some users better understand which of the roles they would actually want for themselves, and which they might find themselves a little bit disappointed with if they were to get them as a result.
+
+Quizzes have trended on TikTok for years.
+
+ ## Are you a Soldier, Poet or King? Take the test that's gone viral on TikTok
+
+ ![img](https://www.indy100.com/media-library/tesla-owner-uses-tiktoker-topher-s-voice-for-car-horn.jpg?id=32888249&width=1200&height=600&coordinates=0%2C193%2C0%2C174)] 
+
+If you love a good ol' personality quiz, there's a new one that's making rounds on TikTok where you can find out if you're more like a soldier, poet or king.
+
+But why those three unique occupations? Well, the test is inspired by the song "Soldier, Poet, King" by The Oh Hellos according to the creator "nour."
+
+To try it out for yourself, the quiz is on the Uquiz website, where it asks participants 20 questions that range from asking definitions such as “what is duty,” to more vague scenarios such as "if you were to hold a crown," and what "the throne looks," like and many more where a multiple choice answer must be selected for each.
+
+Sign up to our free Indy100 weekly newsletter
+
+After entering your answers, you will be given a result of either a solider, poet or king, with a summary as to what qualities you possess that matched you to this role.
+
+This is what the quiz looks like, simply enter you name and press "Start Quiz," to answer the multiple choice questions uQuiz
+
+The quiz has sparked discussions on TikTok as people have revealed what role they were given.
+
+"Highly recommend taking the quiz, it asks some interesting questions. The description of king made so much sense for me but damn I wanted to be a poet," @bews.world wrote.
+
+While @caityreads has been sharing aesthetic videos for the solider, poet and king.
+
+TikToker @iamyourmothersmistress went viral with 4.1m views after sharing how she took the test and was disappointed to be given king instead of poet.
+
+Elsewhere, another uQuiz went viral on TikTok last year that tells you what emotion you are after answering 11 questions include choosing your preferred drink and flower to "choose a random event from life that suits you."
+
+Have your say in our news democracy. Click the upvote icon at the top of the page to help raise this article through the indy100 rankings
+
+ ## Are You A Soldier, Poet Or King? Quiz
+
+ ![img](https://img.buzzfeed.com/buzzfeed-static/static/2023-01/25/15/enhanced/b90adebb87ba/original-4390-1674661725-10.jpg?crop=3809:2000;0,0%26downsize=1250:*)] 

+ 116 - 0
news_templates/content/news/2/1.md

@@ -0,0 +1,116 @@
+---
+title: "Roblox Error 529 | app & website"
+date: 2023-01-26T00:56:29+08:00
+draft: false
+display: true
+tags: ["roblox"]
+categories: ["gaming"]
+description: "-"
+url: "/blog/2"
+image: "https://piunikaweb.com/wp-content/uploads/2021/06/roblox-fi.jpg"
+type: "featured"
+---
+
+ ## [Updated] Roblox app & website down or not working? You're not alone
+
+ ![img](https://piunikaweb.com/wp-content/uploads/2021/06/roblox-fi.jpg)] 
+
+New updates are being added at the bottom of this story…….
+
+Original story (published on June 4, 2021) follows:
+
+Roblox is an online gaming platform as well as a game creation space developed by Roblox Corporation. It gives players the liberty to program their own games and play games created by other users.
+
+The platform is complex and therefore, has had a terrible reputation when it comes to its operations. The Roblox app and website go down and stops working quite often.
+
+There appears to be a similar outage as we speak where users are getting a hard time accessing the application.
+
+And in case you’re trying to get your head around why the Roblox app and website aren’t working for you, find solace in the fact that you aren’t the only one facing issues lately.
+
+A quick look at the micro-blogging site Twitter conveys there are many others affected by the same issue.
+
+As per reports, while some say the service isn’t working or broken for them, others aren’t getting the icons, images, and thumbnails loaded.
+
+For a quick glance, here’s how some of the complainants word the problem:
+
+#robloxdown Is it just me or things on the site (images, clothing) aren’t loading
+
+source
+
+Roblox having those 3AM issues and it’s basically down -_-
+
+source
+
+is roblox down for anyone?
+
+i can’t even get on because things aren’t loading. #RobloxDown
+
+source
+
+Down detector – a popular service that gives information about live outages – also conveys that Roblox is indeed going through a glitch and the sharp spike can be seen in the image below:
+
+Any official word on the matter? Negative, as yet. We’re yet to locate a word from the official service channels or their social media handles.
+
+In fact, the official status says it is still operational. This means that the company is yet to notice the reports.
+
+Rest assured, we’re keeping tabs on all related developments, and will update this page with relevant info as and when we come across any.
+
+So, in case you’re encountering the problem discussed here, stay hooked for updates.
+
+Update 1 (August 05)
+
+Many users have taken to platforms such as Twitter to report that they aren’t able to play the game on multiple platforms.
+
+Roblox has also confirmed that there’s “degraded performance” issues affecting all platforms on its official status page.
+
+Update 2 (August 20)
+
+Roblox is down and not working according to a flood of reports on various social platforms such as Twitter and Reddit.
+
+#RobloxDown yep roblox down my homepage is blank (Source)
+
+Roblox is down my soul has disappeared. I did my 4 Genshin Commissions too idk what to do help me with my bordem (Source)
+
+Yeah me and my friend were playing and then he tried to rejoin and then the entire roblox server went down for him (Source)
+
+The official status page also indicates that the service is facing some disruption and the team is working on a fix. The current status indicates that it’s only a partial disruption.
+
+Update 3 (August 30)
+
+New reports now indicate that Roblox is once again facing an outage. This, as reported by a flurry of new reports on social media. Similarly, Downdetector is reporting a massive spike in number of new reports.
+
+Update 4 (October 29)
+
+Many people have taken to Twitter to report that Roblox is down and not working again. Roblox hasn’t yet made any comments regarding the outage.
+
+is roblox down for anyone else? (Source)
+
+#RobloxDown is anyone having the same issue I can’t login idk if it’s just me but please do tell me if ur experiencing the same thing I’m having doubts that I actually forgot mya password (Source)
+
+roblox still down for hour now #RobloxDown (Source)
+
+Update 5 (October 30)
+
+Roblox has confirmed that they’re “still making progress on today’s outage”. But there’s no ETA for a resolution. That said, the service should return to normal sooner rather than later.
+
+Still making progress on today’s outage. We’ll continue to keep you updated. Once again, we apologize for the delay. We know that this outage was not related to any specific experiences or partnerships on the platform. (Source)
+
+Update 6 (November 01)
+
+Roblox has come out to notify its players that the game is now back online following the earlier reported outage.
+
+Update 7 (December 10)
+
+Fresh reports on Twitter and Downdetector indicate that Roblox is down and not working for many users.
+
+Is roblox going down again or what going on (Source)
+
+@InsideRoblox or @Roblox when is the oculus roblox releasing?? (Source)
+
+LMAO Roblox is actually down once again- (Source)
+
+Update 8 (January 21)
+
+01:48 pm (IST): Many Roblox players have taken to Twitter to report that the platform is currently down and not working.
+
+I guess roblox down is end now, so I will become invisible again #Roblox (Source)

+ 73 - 0
news_templates/content/news/3/1.md

@@ -0,0 +1,73 @@
+---
+title: "「拜天公」8大禁忌要留意!"
+date: 2023-01-26T21:34:45+08:00
+tags: ["玉皇大帝","拜天公"]
+categories: ["religion"]
+draft: false
+type: "post"
+url: "/blog/3"
+image: "https://media.zenfs.com/ko/gotv_ctitv_com_tw_678/0562840f8cf23c3b7247088b1ed67a72"
+type: "post"
+---
+
+農曆正月初九是玉皇大帝的生日,也是俗稱的「天公生」,許多民眾都會在這天「拜天公」,向老天爺表達謝意,祈求未來一年的祝福。不過,民俗專家小孟老師列出了初九的8項禁忌,提醒民眾要特別留意,以免冒犯神明!
+
+清水孟國際塔羅小孟老師發文分享初九拜天公8大禁忌:
+
+**1、 不可曝曬女性內褲:**
+
+民間相傳天公為男性,因此曝曬女性內褲對神明不敬。
+
+**2、不可隨便傾倒便桶,或在戶外小便。**
+
+**3、不可口出穢言,或者亂罵髒話:**
+
+因為初九這天玉皇大帝會下凡,因此不要口出穢言或亂罵髒話,不然會窮一年。
+
+**4、不可發毒誓:**
+
+天公生發誓最靈驗,尤其是男女朋友間的毒誓萬萬不可。
+
+**5、不要說「死」字:**
+
+例如我想死你了、愛死你了等字眼,因為天公生是喜慶之日,這天不可說「死」字。
+
+**6、不能指天:**
+
+玉皇大帝掌天,因此不能指天,不禮貌。
+
+**7、祭拜時不可對周遭的人說「快一點」:**
+
+在祭拜時對周遭的人說「快一點」,這樣會惹怒神明,讓神明認為沒有誠意。
+
+**8、小孩不可對天空噴水:**
+
+小孩不要對天空噴水,玩bb槍或對空發射物品,以免眾神下凡會驚嚇神靈。
+
+
+ ## 初九「天公生」8大禁忌要留意!民俗專家曝:說這字惹火神明衰整年
+
+ ![img](https://media.zenfs.com/ko/gotv_ctitv_com_tw_678/0562840f8cf23c3b7247088b1ed67a72)] 
+
+
+
+ ## 「初九拜天公」10大注意事項一次看!誤踩這點慘窮1整年
+
+ ![img](https://media.zenfs.com/ko/setn.com.tw/6eedf372dbad56fe6f6778c07842a1dc)] 
+
+
+
+ ## 大年初九「拜天公」 專家提醒8禁忌
+
+ ![img](https://obs.line-scdn.net/0hT6o_MTSZCxlSJh6rmSV0TmpwB2hhQBEQcEdMdiNzBiEoChwdbUdYencuUTUvF0tHckURKCUvASEqH0sabA/w1200)] 
+
+
+
+ ## 初九拜天公小心1禁忌!對玉帝不敬
+
+ ![img](https://s.yimg.com/cv/apiv2/social/images/yahoo_default_logo-1200x1200.png)] 
+
+
+
+
+

+ 52 - 0
news_templates/content/news/4/1.md

@@ -0,0 +1,52 @@
+---
+title: "Mihir Das’ younger son Aklant passes away"
+date: 2023-01-27T00:56:29+08:00
+draft: false
+display: true
+tags: ["Mihir Das"]
+categories: ["entertainment"]
+description: "-"
+url: "/blog/4"
+image: "https://www.orissapost.com/wp-content/uploads/2023/01/Aklant-Mishra.jpg"
+type: "focus"
+---
+
+ ## Late Odia actor Mihir Das’ younger son Aklant passes away
+
+ ![img](https://www.orissapost.com/wp-content/uploads/2023/01/Aklant-Mishra.jpg)] 
+
+Cuttack: Late Odia actor Mihir Das’ younger son Aklant Das passed away at late night while undergoing treatment at a hospital in Bhubaneswar, a source said Wednesday.
+
+Aklant was dealing with a liver-related ailment which subsequently led to his untimely demise Tuesday night. His last rites were conducted at Satichaura cemetery in Cuttack, the source informed.
+
+It can be noted here that Odia film actor Mihir Das passed away January 11, 2022 at the age of 63 while undergoing treatment at a hospital in Cuttack.
+
+PNN
+
+ ## Senior Journalist Chiranjeet Rajguru Passes Away
+
+ ![img](https://enewsinsight.com/wp-content/uploads/2023/01/E8759EC1-300A-4315-A544-0AE8A7F98E84.jpeg)] 
+
+TNI Bureau: Tragedy struck the journalism fraternity in Odisha, as Senior Journalist Chiranjeet Rajguru (Chintu) died of heart stroke at the age of 46.
+
+Chiranjeet was rushed to the MKCG Medical College and Hospital in Brahmapur yesterday around noon after complaining breathing issues and uneasiness. He could not recover from the stroke and passed away at around 3:45 AM this morning.
+
+Chiranjeet, who was leading the ‘Sakala’ Daily edition in Berhampur, was one of the most experienced and talented journalists in Ganjam district.
+
+Support Independent Journalism? Keep us live.
+
+He is survived by his wife, a daughter and a son.
+
+Rajya Sabha MP Manas Mangaraj has condoled the demise of Chiranjeet Rajguru.
+
+ ## Aklanta Das Passed Away: ମିହିର ଦାସଙ୍କ ସାନପୁଅ ଅକ୍ଳାନ୍ତଙ୍କ ଅକାଳ ବିୟୋଗ
+
+ ![img](https://hindi.cdn.zeenews.com/hindi/sites/default/files/2023/01/25/1555699-aklanta.jpg)] 
+
+
+
+ ## Photos: ଏମିତି ଥିଲା ବାପା ମିହିର ଓ ପୁଅ ଅକ୍ଳାନ୍ତଙ୍କ ଯୋଡ଼ି, ବାପାଙ୍କ ଦେହାନ୍ତକୁ ଗ୍ରହଣ କରୁନଥିଲେ ଅକ୍ଳାନ୍ତ
+
+ ![img](https://hindi.cdn.zeenews.com/hindi/sites/default/files/2023/01/25/1556047-aklanta-das.jpg)] 
+
+

+ 2 - 0
news_templates/layouts/shortcodes/rawhtml.html

@@ -0,0 +1,2 @@
+<!-- raw html -->
+{{.Inner}}

+ 124 - 0
news_templates/static/css/reset.css

@@ -0,0 +1,124 @@
+html,
+body,
+div,
+span,
+applet,
+object,
+iframe,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+blockquote,
+pre,
+a,
+abbr,
+acronym,
+address,
+big,
+cite,
+code,
+del,
+dfn,
+em,
+img,
+ins,
+kbd,
+q,
+s,
+samp,
+small,
+strike,
+strong,
+sub,
+sup,
+tt,
+var,
+b,
+u,
+i,
+center,
+dl,
+dt,
+dd,
+ol,
+ul,
+li,
+fieldset,
+form,
+label,
+legend,
+table,
+caption,
+tbody,
+tfoot,
+thead,
+tr,
+th,
+td,
+article,
+aside,
+canvas,
+details,
+embed,
+figure,
+figcaption,
+footer,
+header,
+hgroup,
+menu,
+nav,
+output,
+ruby,
+section,
+summary,
+time,
+mark,
+audio,
+video {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-size: 100%;
+  vertical-align: baseline;
+}
+
+/* HTML5 display-role reset for older browsers */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+menu,
+nav,
+section {
+  display: block;
+}
+
+body {
+  line-height: 1;
+}
+
+blockquote,
+q {
+  quotes: none;
+}
+
+blockquote:before,
+blockquote:after,
+q:before,
+q:after {
+  content: '';
+  content: none;
+}
+
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}

+ 371 - 0
news_templates/static/css/style.css

@@ -0,0 +1,371 @@
+@charset "UTF-8";
+/* 共通樣式 */
+:root {
+  --main-color: #000;
+  --sub-color: #e47140;
+  --gray-color: #727272;
+}
+
+* {
+  letter-spacing: 1px;
+  font-weight: 400;
+  font-family: "Noto Sans TC", sans-serif !important;
+}
+
+p,
+li {
+  line-height: 32px;
+}
+
+ul {
+  list-style: none;
+}
+
+img {
+  width: 100%;
+  height: auto;
+}
+
+html,
+body {
+  height: 100%;
+  margin: 0;
+}
+
+body {
+  display: flex;
+  flex-direction: column;
+  overflow-y: scroll;
+}
+
+.btn:focus,
+.form-control:focus {
+  border-color: var(--main-color) !important;
+  box-shadow: none !important;
+  outline: 0 none !important;
+}
+
+.badge {
+  font-weight: 400 !important;
+}
+
+.navbar {
+  background-color: var(--main-color) !important;
+}
+.navbar .navbar-collapse {
+  flex-grow: 0;
+}
+.navbar .navbar-brand {
+  font-size: 50px;
+  font-weight: 500;
+  font-family: "Roboto Slab", serif !important;
+  color: var(--sub-color);
+  transition: all 0.3s;
+}
+.navbar .navbar-brand:hover {
+  opacity: 0.9;
+  color: var(--sub-color);
+}
+
+.blog-post-tags .badge {
+  background-color: var(--main-color);
+}
+.blog-post-tags .badge:hover {
+  color: var(--main-color);
+  background-color: #fff;
+  border: 1px solid var(--main-color);
+}
+
+.blog-post-title {
+  margin: 10px 0 20px;
+}
+.blog-post-title a {
+  font-size: 50px;
+  font-weight: 600;
+}
+
+.pagination {
+  justify-content: center;
+}
+.pagination .page-link {
+  color: var(--main-color);
+}
+.pagination .page-item.active .page-link {
+  z-index: 3;
+  color: #fff;
+  background-color: var(--main-color);
+  border-color: var(--main-color);
+}
+
+.post-title a {
+  color: #000;
+  text-decoration: none;
+  font-size: 22px;
+  font-weight: 500;
+}
+
+.post-block-title {
+  margin-bottom: 20px;
+  position: relative;
+  font-size: 22px;
+}
+.post-block-title::after {
+  position: absolute;
+  z-index: -10;
+  top: 15px;
+  left: 0;
+  width: 100%;
+  height: 0px;
+  content: "";
+  border-bottom: 1px solid #929292;
+  bottom: 5px;
+}
+.post-block-title span {
+  font-weight: 500;
+  background: #fff;
+}
+
+.news-info {
+  margin-top: 10px;
+  line-height: 20px;
+}
+.news-info a {
+  font-size: 14px;
+  font-weight: 500;
+  color: var(--gray-color);
+  text-decoration: none;
+  transition: all 0.3s;
+}
+.news-info a:hover {
+  opacity: 0.8;
+}
+.news-info small {
+  color: var(--gray-color);
+}
+
+.news-thumbnail {
+  height: 100%;
+  -o-object-fit: cover;
+     object-fit: cover;
+}
+
+.line-clamp {
+  max-width: 150px;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.post-depiction {
+  margin: 10px 0;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  line-height: 26px;
+}
+.post-depiction a {
+  color: #7a7a7a;
+  text-decoration: none;
+}
+
+.top-btn {
+  position: fixed;
+  bottom: 15px;
+  right: 15px;
+  z-index: 10;
+  opacity: 0;
+  transition: all 0.5s;
+}
+.top-btn button {
+  border: none;
+  background: var(--sub-color);
+  border-radius: 100px;
+  width: 55px;
+  height: 55px;
+}
+
+.show {
+  opacity: 1;
+}
+
+/* sidebar.html Start */
+.news-sidebar {
+  position: sticky;
+  top: 15px;
+}
+.news-sidebar .news-featured {
+  position: unset;
+}
+
+.search-btn {
+  border: 1px solid var(--main-color) !important;
+}
+.search-btn svg {
+  color: var(--main-color);
+}
+.search-btn:hover {
+  background-color: var(--main-color) !important;
+}
+.search-btn:hover svg {
+  color: #fff;
+}
+
+.tags {
+  margin: 0 5px 5px 0;
+  padding: 7px 10px !important;
+  font-size: 14px !important;
+  font-weight: 400 !important;
+  color: var(--main-color) !important;
+  border: 1px solid var(--main-color) !important;
+}
+.tags:hover {
+  color: #fff !important;
+  background-color: var(--main-color);
+}
+
+/* sidebar.html End */
+/* single.html Start */
+.blog-post.content h4 {
+  font-size: 16px;
+  font-weight: 300;
+  line-height: 32px;
+}
+.blog-post.content h4 a {
+  padding: 5px 8px;
+  margin-right: 3px;
+  border: 1px solid #000;
+  border-radius: 5px;
+  font-size: 14px;
+}
+.blog-post.content h4 a:hover {
+  color: #fff !important;
+}
+.blog-post.content .back-link {
+  color: #000;
+  display: block;
+  text-align: center;
+  text-decoration: none;
+  transition: all 0.3s;
+}
+.blog-post.content .back-link:hover {
+  opacity: 0.7;
+}
+
+/* single.html End */
+/* content.html Start */
+.news-main {
+  height: 100%;
+  overflow: hidden;
+}
+.news-main .post-title a {
+  font-size: 34px;
+}
+.news-main img {
+  height: 100%;
+  -o-object-fit: cover;
+     object-fit: cover;
+}
+.news-main .news-info a {
+  font-size: 16px;
+}
+
+/* content.html End */
+/* focus.html Start */
+.focus-content {
+  position: sticky;
+  top: 20px;
+}
+
+/* focus.html End */
+/* recent.html Start */
+.recent-content .news-list {
+  margin: 0;
+}
+.recent-content .news-list li {
+  margin: 15px 0;
+}
+.recent-content .news-list li img {
+  width: 140px;
+  height: 105px;
+  -o-object-fit: cover;
+     object-fit: cover;
+}
+.recent-content .news-list li small {
+  display: block;
+}
+.recent-content .news-list li .news-info {
+  margin-top: 0px;
+}
+.recent-content .news-list li:last-child {
+  margin: 0;
+}
+
+/* recent.html End */
+/* news-tab.html Start */
+.tab-category .nav-link {
+  color: var(--main-color);
+  font-weight: 500;
+}
+.tab-category .nav-pills .nav-link.active,
+.tab-category .nav-pills .show > .nav-link {
+  color: var(--sub-color);
+  background-color: var(--main-color);
+}
+
+.tab-content .bg-img {
+  position: relative;
+  height: 370px;
+  background-blend-mode: multiply;
+  background-size: cover;
+  background-position: center center;
+  cursor: pointer;
+}
+.tab-content .bg-img section {
+  padding: 10px 25px;
+  position: absolute;
+  bottom: 0;
+  color: #fff;
+}
+.tab-content .bg-img section a {
+  color: #fff;
+  text-decoration: none;
+}
+.tab-content .bg-img section small {
+  font-size: 12px;
+}
+
+/* news-tab.html End */
+/* news-all.html Start */
+.news-all .post-title {
+  margin: 5px auto;
+}
+.news-all .post-title a {
+  font-size: 36px;
+}
+.news-all .news-info a {
+  font-size: 18px;
+}
+.news-all hr {
+  margin: 1.5rem 0;
+}
+.news-all .first-img {
+  height: 50vh;
+  -o-object-fit: cover;
+     object-fit: cover;
+}
+.news-all .line {
+  padding: 0 12px;
+}
+
+/* news-all.html End */
+/* news-featured.html Start */
+.news-featured {
+  position: sticky;
+  top: 20px;
+}
+
+/* news-featured.html End *//*# sourceMappingURL=style.css.map */

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
news_templates/static/css/style.css.map


+ 407 - 0
news_templates/static/css/style.scss

@@ -0,0 +1,407 @@
+/* 共通樣式 */
+
+:root {
+  --main-color: #000;
+  --sub-color: #e47140;
+  --gray-color: #727272;
+}
+
+* {
+  letter-spacing: 1px;
+  font-weight: 400;
+  font-family: "Noto Sans TC", sans-serif !important;
+}
+
+p,
+li {
+  line-height: 32px;
+}
+
+ul {
+  list-style: none;
+}
+
+img {
+  width: 100%;
+  height: auto;
+}
+
+html,
+body {
+  height: 100%;
+  margin: 0;
+}
+
+body {
+  display: flex;
+  flex-direction: column;
+  overflow-y: scroll;
+}
+
+.btn:focus,
+.form-control:focus {
+  border-color: var(--main-color) !important;
+  box-shadow: none !important;
+  outline: 0 none !important;
+}
+
+.badge {
+  font-weight: 400 !important;
+}
+
+.navbar {
+  background-color: var(--main-color) !important;
+  .navbar-collapse {
+    flex-grow: 0;
+  }
+  .navbar-brand {
+    font-size: 50px;
+    font-weight: 500;
+    font-family: "Roboto Slab", serif !important;
+    color: var(--sub-color);
+    transition: all 0.3s;
+    &:hover {
+      opacity: 0.9;
+      color: var(--sub-color);
+    }
+  }
+}
+
+.blog-post-tags {
+  .badge {
+    background-color: var(--main-color);
+    &:hover {
+      color: var(--main-color);
+      background-color: #fff;
+      border: 1px solid var(--main-color);
+    }
+  }
+}
+
+.blog-post-title {
+  margin: 10px 0 20px;
+  a {
+    font-size: 50px;
+    font-weight: 600;
+  }
+}
+
+.pagination {
+  justify-content: center;
+  .page-link {
+    color: var(--main-color);
+  }
+  .page-item.active .page-link {
+    z-index: 3;
+    color: #fff;
+    background-color: var(--main-color);
+    border-color: var(--main-color);
+  }
+}
+
+.post-title {
+  a {
+    color: #000;
+    text-decoration: none;
+    font-size: 22px;
+    font-weight: 500;
+  }
+}
+
+.post-block-title {
+  margin-bottom: 20px;
+  position: relative;
+  font-size: 22px;
+  &::after {
+    position: absolute;
+    z-index: -10;
+    top: 15px;
+    left: 0;
+    width: 100%;
+    height: 0px;
+    content: "";
+    border-bottom: 1px solid #929292;
+    bottom: 5px;
+  }
+  span {
+    font-weight: 500;
+    background: #fff;
+  }
+}
+
+.news-info {
+  margin-top: 10px;
+  line-height: 20px;
+  a {
+    font-size: 14px;
+    font-weight: 500;
+    color: var(--gray-color);
+    text-decoration: none;
+    transition: all 0.3s;
+    &:hover {
+      opacity: 0.8;
+    }
+  }
+  small {
+    color: var(--gray-color);
+  }
+}
+
+.news-thumbnail {
+  height: 100%;
+  object-fit: cover;
+}
+
+// 文字省略
+.line-clamp {
+  max-width: 150px;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.post-depiction {
+  // max-width: 350px;
+  margin: 10px 0;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  line-height: 26px;
+  a {
+    color: #7a7a7a;
+    text-decoration: none;
+  }
+}
+
+.top-btn {
+  position: fixed;
+  bottom: 15px;
+  right: 15px;
+  z-index: 10;
+  opacity: 0; // scrollTop = 0
+  transition: all .5s;
+  button {
+    border: none;
+    background: var(--sub-color);
+    border-radius: 100px;
+    width: 55px;
+    height: 55px;
+  }
+}
+
+.show {
+  opacity: 1; // scrollTop > 100
+} 
+
+/* sidebar.html Start */
+
+.news-sidebar {
+  position: sticky;
+  top: 15px;
+  .news-featured {
+    position: unset;
+  }
+}
+
+.search-btn {
+  border: 1px solid var(--main-color) !important;
+  svg {
+    color: var(--main-color);
+  }
+  &:hover {
+    background-color: var(--main-color) !important;
+    svg {
+      color: #fff;
+    }
+  }
+}
+
+.tags {
+  margin: 0 5px 5px 0;
+  padding: 7px 10px !important;
+  font-size: 14px !important;
+  font-weight: 400 !important;
+  color: var(--main-color) !important;
+  border: 1px solid var(--main-color) !important;
+  &:hover {
+    color: #fff !important;
+    background-color: var(--main-color);
+  }
+}
+
+/* sidebar.html End */
+
+/* single.html Start */
+
+.blog-post.content {
+  h4 {
+    font-size: 16px;
+    font-weight: 300;
+    line-height: 32px;
+    a {
+      padding: 5px 8px;
+      margin-right: 3px;
+      border: 1px solid #000;
+      border-radius: 5px;
+      font-size: 14px;
+      &:hover {
+        color: #fff !important;
+      }
+    }
+  }
+  .back-link {
+    color: #000;
+    display: block;
+    text-align: center;
+    text-decoration: none;
+    transition: all 0.3s;
+    &:hover {
+      opacity: 0.7;
+    }
+  }
+}
+
+/* single.html End */
+
+/* content.html Start */
+
+.news-main {
+  height: 100%;
+  overflow: hidden;
+  .post-title {
+    a {
+      font-size: 34px;
+    }
+  }
+
+  img {
+    height: 100%;
+    object-fit: cover;
+  }
+
+  .news-info {
+    a {
+      font-size: 16px;
+    }
+  }
+}
+
+/* content.html End */
+
+/* focus.html Start */
+
+.focus-content {
+  position: sticky;
+  top: 20px;
+}
+
+/* focus.html End */
+
+/* recent.html Start */
+
+.recent-content {
+  .news-list {
+    margin: 0;
+    li {
+      margin: 15px 0;
+      img {
+        width: 140px;
+        height: 105px;
+        object-fit: cover;
+      }
+      small {
+        display: block;
+      }
+      .news-info {
+        margin-top: 0px;
+      }
+    }
+    li:last-child {
+      margin: 0;
+    }
+  }
+}
+
+/* recent.html End */
+
+/* news-tab.html Start */
+
+.tab-category {
+  .nav-link {
+    color: var(--main-color);
+    font-weight: 500;
+  }
+  .nav-pills .nav-link.active,
+  .nav-pills .show > .nav-link {
+    color: var(--sub-color);
+    background-color: var(--main-color);
+  }
+}
+
+.tab-content {
+  .bg-img {
+    position: relative;
+    height: 370px;
+    // 設置背景混和模式為相乘模式
+    background-blend-mode: multiply;
+    background-size: cover;
+    background-position: center center;
+    cursor: pointer;
+    section {
+      padding: 10px 25px;
+      position: absolute;
+      bottom: 0;
+      color: #fff;
+      a {
+        color: #fff;
+        text-decoration: none;
+      }
+      small {
+        font-size: 12px;
+      }
+    }
+  }
+}
+
+/* news-tab.html End */
+
+/* news-all.html Start */
+
+.news-all {
+  .post-title {
+    margin: 5px auto;
+    a {
+      font-size: 36px;
+    }
+  }
+  .news-info {
+    a {
+      font-size: 18px;
+    }
+  }
+  hr {
+    margin: 1.5rem 0;
+  }
+  .first-img {
+    height: 50vh;
+    object-fit: cover;
+  }
+  .line {
+    padding: 0 12px;
+  }
+}
+
+/* news-all.html End */
+
+/* news-featured.html Start */
+
+.news-featured {
+  position: sticky;
+  top: 20px;
+}
+
+/* news-featured.html End */

+ 1 - 0
news_templates/static/googlea343783bd909616f.html

@@ -0,0 +1 @@
+google-site-verification: googlea343783bd909616f.html

BIN
news_templates/static/img/image.jpg


+ 35 - 0
news_templates/static/js/main.js

@@ -0,0 +1,35 @@
+// 切換分頁時移至列表區塊
+document.addEventListener("DOMContentLoaded", () => {
+    if (document.querySelector('#news-block')) {
+        let offsetHeight = document.querySelector('#news-block').offsetTop;
+        if (offsetHeight) window.scrollTo(0, offsetHeight);
+    }
+});
+
+function historyBack() {
+    let prevPage = window.location.href;
+
+    // 若無法返回上一頁則回到首頁
+    window.history.go(-1);
+
+    setTimeout(() => {
+        if (window.location.href == prevPage) {
+            window.location.href = "/";
+        }
+    }, 500);
+}
+
+let topBtn = document.querySelector('.top-btn');
+
+window.onscroll = () => {
+    const px = 100;
+    if (document.documentElement.scrollTop > px) {
+        topBtn.classList.add("show");
+    } else {
+        topBtn.classList.remove("show");
+    }
+};
+
+topBtn.addEventListener('click', () => {
+    document.documentElement.scrollTop = 0;
+}, false);

+ 20 - 0
news_templates/themes/hugo-bootstrap-5/LICENSE.md

@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2020 Tiger Oakes
+
+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.

+ 52 - 0
news_templates/themes/hugo-bootstrap-5/README.md

@@ -0,0 +1,52 @@
+# Hugo Bootstrap v5 Theme
+
+This is a simple Hugo theme using [Bootstrap v5](https://getbootstrap.com/), inspired by [hugo-bootstrap](https://github.com/Xzya/hugo-bootstrap).
+
+## Installation
+
+You can install the theme either as a clone or submodule.
+
+I recommend the latter. From the root of your Hugo site, type the following:
+
+```shell
+$ git submodule add https://github.com/NotWoods/hugo-bootstrap-5.git themes/hugo-bootstrap-5
+$ git submodule init
+$ git submodule update
+```
+
+Now you can get updates to the theme in the future by updating the submodule:
+
+```
+$ git submodule update --remote themes/hugo-bootstrap-5
+```
+
+## Demo
+
+You can find a demo [here](https://themes.gohugo.io/theme/hugo-bootstrap-5/).
+
+## Screenshots
+
+![preview](https://raw.githubusercontent.com/NotWoods/hugo-bootstrap-5/master/images/screenshot.png)
+![preview](https://raw.githubusercontent.com/NotWoods/hugo-bootstrap-5/master/images/screenshot2.png)
+
+## Configuration
+
+Check `exampleSite/config.toml` for an example configuration.
+
+## Brand
+
+The brand can be overriden by adding your own layout `layouts/partials/brand.html`. Check `exampleSite/layouts/partials/brand.html` for an example.
+
+## Menu
+
+The navbar displays the `main` menus by default. You can find more details about how to configure it [here](https://gohugo.io/templates/menu-templates/), as well as in the `exampleSite`.
+
+## Multilanguage
+
+The theme supports multiple languages.
+
+You can find the default translation bundles in `i18n` (english and spanish by default).
+
+## License
+
+Open sourced under the [MIT license](./LICENSE.md).

+ 105 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/config.toml

@@ -0,0 +1,105 @@
+baseurl = "https://example.com/"
+title = "Bootstrap demo"
+languageCode = "en-us"
+defaultContentLanguage = "en"
+
+# Pagination
+paginate = 3
+paginatePath = "page"
+
+# Theme to use
+theme = "hugo-bootstrap-5"
+
+[taxonomies]
+  tag = "tags"
+  category = "categories"
+
+# Google analytics
+# googleAnalytics = ""
+
+[languages.en]
+  languageName = "English"
+
+  # Replace the default footer message with a localized message
+  # copyright = "Hugo template made with ❤ by Xzya"
+
+  [[languages.en.menu.main]]
+    url = "/"
+    name = "Home"
+    weight = 1
+  [[languages.en.menu.main]]
+    url = "/about/"
+    name = "About"
+    weight = 2
+  [[languages.en.menu.main]]
+    url = "/contact/"
+    name = "Contact"
+    weight = 3
+
+[languages.es]
+  languageName = "Español"
+
+  [[languages.es.menu.main]]
+    url = "/es/"
+    name = "Casa"
+    weight = 1
+  [[languages.es.menu.main]]
+    url = "/about/"
+    name = "Acerca de"
+    weight = 2
+  [[languages.es.menu.main]]
+    url = "/contact/"
+    name = "Contacto"
+    weight = 3
+
+[languages.de]
+  languageName = "Deutsch"
+
+  [[languages.de.menu.main]]
+    url = "/de/"
+    name = "Start"
+    weight = 1
+  [[languages.de.menu.main]]
+    url = "/about/"
+    name = "Über uns"
+    weight = 2
+  [[languages.de.menu.main]]
+    url = "/contact/"
+    name = "Kontakt"
+    weight = 3
+
+# Links format
+
+[permalinks]
+  post = "/:year/:month/:title/"
+
+[params]
+  # Main sections (currently used for the recent posts in the sidebar)
+  mainSections = ["post"]
+
+  # Default author
+  author = "John Doe"
+
+  # Date format (default: Jan 2, 2006)
+  # date_format = "Jan 2, 2006"
+
+  # Display post summaries instead of content in list templates (default: true)
+  # truncate = false
+
+  [params.sidebar]
+    # Whether to show the recent posts or not (default: true)
+    # showRecent = false
+
+    # Whether to show the taxonomies or not (default: true)
+    # showTaxonomy = false
+
+    # How many posts to show on the sidebar (Default: 5)
+    # num_recent_posts = 5
+
+  [params.header]
+    # Color scheme for the header (default: "light")
+    # colorScheme = "dark"
+
+  [params.footer]
+    # Color scheme for the footer (default: "light")
+    # colorScheme = "dark"

+ 13 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/about.de.md

@@ -0,0 +1,13 @@
+---
+title: "Über uns"
+---
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nec ex vel orci dapibus aliquam non in metus. Vestibulum posuere justo nunc, eu eleifend orci dignissim in. Vestibulum eu eros neque. Quisque luctus posuere sapien nec accumsan. Maecenas mattis, nisl ac dictum ultrices, ligula eros vehicula eros, vel fermentum diam erat eget dolor. Suspendisse vitae felis ligula. Integer quis tincidunt risus, convallis ullamcorper dui. Suspendisse potenti. Sed scelerisque volutpat leo, at mattis ipsum posuere nec. Cras id velit imperdiet, laoreet lorem et, feugiat elit. Donec vitae odio fringilla, porttitor eros vel, varius magna.
+
+Nulla molestie laoreet tortor, nec congue eros lacinia eget. Etiam aliquet odio semper felis ultrices, eget suscipit ex interdum. Proin maximus, dolor ac suscipit pretium, metus sapien pulvinar velit, posuere placerat libero urna nec dui. Praesent sed porttitor lacus. Suspendisse volutpat tempor gravida. Nam a dolor sed erat hendrerit porttitor. Sed semper eget sem et mollis. Integer ultrices luctus tellus, vitae semper augue tristique et. Phasellus sit amet ornare libero. Etiam risus tortor, suscipit non tempor vitae, sodales quis elit. Aliquam convallis nisl ac erat euismod scelerisque. Vivamus ornare lectus sit amet nisl facilisis maximus. Nulla interdum eu diam sit amet auctor. Nulla dapibus laoreet metus, et lacinia nulla facilisis ut. Duis volutpat nibh maximus ultrices sollicitudin. Curabitur orci justo, finibus ac ipsum eget, scelerisque pharetra elit.
+
+In hac habitasse platea dictumst. Suspendisse facilisis justo posuere, luctus mi vel, elementum quam. Nullam imperdiet elit a erat gravida pretium. Cras pretium metus odio, tristique interdum urna varius a. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Praesent fringilla mauris id tincidunt varius. Aliquam erat volutpat. Suspendisse vitae euismod neque. Maecenas porta mauris a lectus suscipit, vehicula dictum odio condimentum. Ut at luctus enim, in pretium urna.
+
+Phasellus sagittis at mauris vitae mattis. Proin sed tortor fringilla, porta risus sed, faucibus odio. Maecenas fermentum vitae metus sit amet rutrum. Fusce porttitor elit vitae nisi sollicitudin luctus. Nunc purus urna, porttitor quis neque ac, viverra volutpat arcu. Sed pulvinar pellentesque placerat. Praesent iaculis, nisl non efficitur fermentum, lacus ligula porta tortor, feugiat dapibus diam justo a sapien. Sed neque odio, fermentum eu convallis non, consequat sollicitudin sem. Nullam placerat augue sed tortor ultricies vulputate. Nunc cursus elit at consectetur accumsan. Suspendisse potenti. Cras ultrices interdum dui vitae consequat. Maecenas porta mauris urna, in fermentum nisi pharetra eu.
+
+Donec a ex sit amet mauris accumsan sagittis vel eget turpis. In leo lorem, dignissim vitae justo sit amet, congue porttitor nisi. Nunc commodo mattis dapibus. Proin condimentum sagittis euismod. Quisque consectetur velit sed volutpat dignissim. Proin ac enim metus. Quisque eu arcu sapien. In hac habitasse platea dictumst. Etiam scelerisque urna risus, a sagittis diam ornare sed. 

+ 13 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/about.es.md

@@ -0,0 +1,13 @@
+---
+title: "Acerca de"
+---
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nec ex vel orci dapibus aliquam non in metus. Vestibulum posuere justo nunc, eu eleifend orci dignissim in. Vestibulum eu eros neque. Quisque luctus posuere sapien nec accumsan. Maecenas mattis, nisl ac dictum ultrices, ligula eros vehicula eros, vel fermentum diam erat eget dolor. Suspendisse vitae felis ligula. Integer quis tincidunt risus, convallis ullamcorper dui. Suspendisse potenti. Sed scelerisque volutpat leo, at mattis ipsum posuere nec. Cras id velit imperdiet, laoreet lorem et, feugiat elit. Donec vitae odio fringilla, porttitor eros vel, varius magna.
+
+Nulla molestie laoreet tortor, nec congue eros lacinia eget. Etiam aliquet odio semper felis ultrices, eget suscipit ex interdum. Proin maximus, dolor ac suscipit pretium, metus sapien pulvinar velit, posuere placerat libero urna nec dui. Praesent sed porttitor lacus. Suspendisse volutpat tempor gravida. Nam a dolor sed erat hendrerit porttitor. Sed semper eget sem et mollis. Integer ultrices luctus tellus, vitae semper augue tristique et. Phasellus sit amet ornare libero. Etiam risus tortor, suscipit non tempor vitae, sodales quis elit. Aliquam convallis nisl ac erat euismod scelerisque. Vivamus ornare lectus sit amet nisl facilisis maximus. Nulla interdum eu diam sit amet auctor. Nulla dapibus laoreet metus, et lacinia nulla facilisis ut. Duis volutpat nibh maximus ultrices sollicitudin. Curabitur orci justo, finibus ac ipsum eget, scelerisque pharetra elit.
+
+In hac habitasse platea dictumst. Suspendisse facilisis justo posuere, luctus mi vel, elementum quam. Nullam imperdiet elit a erat gravida pretium. Cras pretium metus odio, tristique interdum urna varius a. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Praesent fringilla mauris id tincidunt varius. Aliquam erat volutpat. Suspendisse vitae euismod neque. Maecenas porta mauris a lectus suscipit, vehicula dictum odio condimentum. Ut at luctus enim, in pretium urna.
+
+Phasellus sagittis at mauris vitae mattis. Proin sed tortor fringilla, porta risus sed, faucibus odio. Maecenas fermentum vitae metus sit amet rutrum. Fusce porttitor elit vitae nisi sollicitudin luctus. Nunc purus urna, porttitor quis neque ac, viverra volutpat arcu. Sed pulvinar pellentesque placerat. Praesent iaculis, nisl non efficitur fermentum, lacus ligula porta tortor, feugiat dapibus diam justo a sapien. Sed neque odio, fermentum eu convallis non, consequat sollicitudin sem. Nullam placerat augue sed tortor ultricies vulputate. Nunc cursus elit at consectetur accumsan. Suspendisse potenti. Cras ultrices interdum dui vitae consequat. Maecenas porta mauris urna, in fermentum nisi pharetra eu.
+
+Donec a ex sit amet mauris accumsan sagittis vel eget turpis. In leo lorem, dignissim vitae justo sit amet, congue porttitor nisi. Nunc commodo mattis dapibus. Proin condimentum sagittis euismod. Quisque consectetur velit sed volutpat dignissim. Proin ac enim metus. Quisque eu arcu sapien. In hac habitasse platea dictumst. Etiam scelerisque urna risus, a sagittis diam ornare sed. 

+ 13 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/about.md

@@ -0,0 +1,13 @@
+---
+title: "About"
+---
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed nec ex vel orci dapibus aliquam non in metus. Vestibulum posuere justo nunc, eu eleifend orci dignissim in. Vestibulum eu eros neque. Quisque luctus posuere sapien nec accumsan. Maecenas mattis, nisl ac dictum ultrices, ligula eros vehicula eros, vel fermentum diam erat eget dolor. Suspendisse vitae felis ligula. Integer quis tincidunt risus, convallis ullamcorper dui. Suspendisse potenti. Sed scelerisque volutpat leo, at mattis ipsum posuere nec. Cras id velit imperdiet, laoreet lorem et, feugiat elit. Donec vitae odio fringilla, porttitor eros vel, varius magna.
+
+Nulla molestie laoreet tortor, nec congue eros lacinia eget. Etiam aliquet odio semper felis ultrices, eget suscipit ex interdum. Proin maximus, dolor ac suscipit pretium, metus sapien pulvinar velit, posuere placerat libero urna nec dui. Praesent sed porttitor lacus. Suspendisse volutpat tempor gravida. Nam a dolor sed erat hendrerit porttitor. Sed semper eget sem et mollis. Integer ultrices luctus tellus, vitae semper augue tristique et. Phasellus sit amet ornare libero. Etiam risus tortor, suscipit non tempor vitae, sodales quis elit. Aliquam convallis nisl ac erat euismod scelerisque. Vivamus ornare lectus sit amet nisl facilisis maximus. Nulla interdum eu diam sit amet auctor. Nulla dapibus laoreet metus, et lacinia nulla facilisis ut. Duis volutpat nibh maximus ultrices sollicitudin. Curabitur orci justo, finibus ac ipsum eget, scelerisque pharetra elit.
+
+In hac habitasse platea dictumst. Suspendisse facilisis justo posuere, luctus mi vel, elementum quam. Nullam imperdiet elit a erat gravida pretium. Cras pretium metus odio, tristique interdum urna varius a. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Praesent fringilla mauris id tincidunt varius. Aliquam erat volutpat. Suspendisse vitae euismod neque. Maecenas porta mauris a lectus suscipit, vehicula dictum odio condimentum. Ut at luctus enim, in pretium urna.
+
+Phasellus sagittis at mauris vitae mattis. Proin sed tortor fringilla, porta risus sed, faucibus odio. Maecenas fermentum vitae metus sit amet rutrum. Fusce porttitor elit vitae nisi sollicitudin luctus. Nunc purus urna, porttitor quis neque ac, viverra volutpat arcu. Sed pulvinar pellentesque placerat. Praesent iaculis, nisl non efficitur fermentum, lacus ligula porta tortor, feugiat dapibus diam justo a sapien. Sed neque odio, fermentum eu convallis non, consequat sollicitudin sem. Nullam placerat augue sed tortor ultricies vulputate. Nunc cursus elit at consectetur accumsan. Suspendisse potenti. Cras ultrices interdum dui vitae consequat. Maecenas porta mauris urna, in fermentum nisi pharetra eu.
+
+Donec a ex sit amet mauris accumsan sagittis vel eget turpis. In leo lorem, dignissim vitae justo sit amet, congue porttitor nisi. Nunc commodo mattis dapibus. Proin condimentum sagittis euismod. Quisque consectetur velit sed volutpat dignissim. Proin ac enim metus. Quisque eu arcu sapien. In hac habitasse platea dictumst. Etiam scelerisque urna risus, a sagittis diam ornare sed. 

+ 5 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/contact.de.md

@@ -0,0 +1,5 @@
+---
+title: "Kontakt"
+---
+
+Kontaktieren Sie uns!

+ 5 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/contact.es.md

@@ -0,0 +1,5 @@
+---
+title: "Contacto"
+---
+
+Contact us!

+ 5 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/contact.md

@@ -0,0 +1,5 @@
+---
+title: "Contact"
+---
+
+Contact us!

+ 13 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/2015-01-04-first-post.es.md

@@ -0,0 +1,13 @@
+---
+title: Primer comentario!
+date: 2015-01-05
+tags: ["demo"]
+---
+
+This is my first post, how exciting!
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
+
+<!--more-->
+
+Nullam at magna blandit, bibendum massa non, tincidunt turpis. Phasellus convallis lorem quis leo vulputate posuere. Nullam sit amet mattis lorem. Praesent et dolor feugiat, fringilla mauris iaculis, fringilla purus. Duis a finibus justo. Praesent tincidunt malesuada quam, ornare euismod sem vulputate vitae. Suspendisse consectetur ut felis vel tempor. Ut a viverra quam, quis luctus lorem. Pellentesque dolor ipsum, euismod vitae felis sit amet, fermentum consequat mi. Pellentesque eget mauris eu mi suscipit consequat.

+ 13 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/2015-01-04-first-post.md

@@ -0,0 +1,13 @@
+---
+title: First post!
+date: 2015-01-05
+tags: ["demo"]
+---
+
+This is my first post, how exciting!
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
+
+<!--more-->
+
+Nullam at magna blandit, bibendum massa non, tincidunt turpis. Phasellus convallis lorem quis leo vulputate posuere. Nullam sit amet mattis lorem. Praesent et dolor feugiat, fringilla mauris iaculis, fringilla purus. Duis a finibus justo. Praesent tincidunt malesuada quam, ornare euismod sem vulputate vitae. Suspendisse consectetur ut felis vel tempor. Ut a viverra quam, quis luctus lorem. Pellentesque dolor ipsum, euismod vitae felis sit amet, fermentum consequat mi. Pellentesque eget mauris eu mi suscipit consequat.

+ 13 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/2016-01-04-first-post.de.md

@@ -0,0 +1,13 @@
+---
+title: Erster Artikel!
+date: 2015-01-05
+tags: ["demo"]
+---
+
+Das ist mein erster Artikel, wie spannend!
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+<!--more-->
+
+Nullam at magna blandit, bibendum massa non, tincidunt turpis. Phasellus convallis lorem quis leo vulputate posuere. Nullam sit amet mattis lorem. Praesent et dolor feugiat, fringilla mauris iaculis, fringilla purus. Duis a finibus justo. Praesent tincidunt malesuada quam, ornare euismod sem vulputate vitae. Suspendisse consectetur ut felis vel tempor. Ut a viverra quam, quis luctus lorem. Pellentesque dolor ipsum, euismod vitae felis sit amet, fermentum consequat mi. Pellentesque eget mauris eu mi suscipit consequat.

+ 4 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/_index.md

@@ -0,0 +1,4 @@
+---
+title: Posts
+---
+Hello world!

+ 1147 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/creating-a-new-theme.md

@@ -0,0 +1,1147 @@
+---
+author: "Michael Henderson"
+date: 2014-09-28
+linktitle: Creating a New Theme
+next: /tutorials/github-pages-blog
+prev: /tutorials/automated-deployments
+title: Creating a New Theme
+weight: 10
+---
+
+
+## Introduction
+
+This tutorial will show you how to create a simple theme in Hugo. I assume that you are familiar with HTML, the bash command line, and that you are comfortable using Markdown to format content. I'll explain how Hugo uses templates and how you can organize your templates to create a theme. I won't cover using CSS to style your theme.
+
+We'll start with creating a new site with a very basic template. Then we'll add in a few pages and posts. With small variations on that, you will be able to create many different types of web sites.
+
+In this tutorial, commands that you enter will start with the "$" prompt. The output will follow. Lines that start with "#" are comments that I've added to explain a point. When I show updates to a file, the ":wq" on the last line means to save the file.
+
+Here's an example:
+
+```
+## this is a comment
+$ echo this is a command
+this is a command
+
+## edit the file
+$vi foo.md
++++
+date = "2014-09-28"
+title = "creating a new theme"
++++
+
+bah and humbug
+:wq
+
+## show it
+$ cat foo.md
++++
+date = "2014-09-28"
+title = "creating a new theme"
++++
+
+bah and humbug
+$
+```
+
+
+## Some Definitions
+
+There are a few concepts that you need to understand before creating a theme.
+
+### Skins
+
+Skins are the files responsible for the look and feel of your site. It’s the CSS that controls colors and fonts, it’s the Javascript that determines actions and reactions. It’s also the rules that Hugo uses to transform your content into the HTML that the site will serve to visitors.
+
+You have two ways to create a skin. The simplest way is to create it in the ```layouts/``` directory. If you do, then you don’t have to worry about configuring Hugo to recognize it. The first place that Hugo will look for rules and files is in the ```layouts/``` directory so it will always find the skin.
+
+Your second choice is to create it in a sub-directory of the ```themes/``` directory. If you do, then you must always tell Hugo where to search for the skin. It’s extra work, though, so why bother with it?
+
+The difference between creating a skin in ```layouts/``` and creating it in ```themes/``` is very subtle. A skin in ```layouts/``` can’t be customized without updating the templates and static files that it is built from. A skin created in ```themes/```, on the other hand, can be and that makes it easier for other people to use it.
+
+The rest of this tutorial will call a skin created in the ```themes/``` directory a theme.
+
+Note that you can use this tutorial to create a skin in the ```layouts/``` directory if you wish to. The main difference will be that you won’t need to update the site’s configuration file to use a theme.
+
+### The Home Page
+
+The home page, or landing page, is the first page that many visitors to a site see. It is the index.html file in the root directory of the web site. Since Hugo writes files to the public/ directory, our home page is public/index.html.
+
+### Site Configuration File
+
+When Hugo runs, it looks for a configuration file that contains settings that override default values for the entire site. The file can use TOML, YAML, or JSON. I prefer to use TOML for my configuration files. If you prefer to use JSON or YAML, you’ll need to translate my examples. You’ll also need to change the name of the file since Hugo uses the extension to determine how to process it.
+
+Hugo translates Markdown files into HTML. By default, Hugo expects to find Markdown files in your ```content/``` directory and template files in your ```themes/``` directory. It will create HTML files in your ```public/``` directory. You can change this by specifying alternate locations in the configuration file.
+
+### Content
+
+Content is stored in text files that contain two sections. The first section is the “front matter,” which is the meta-information on the content. The second section contains Markdown that will be converted to HTML.
+
+#### Front Matter
+
+The front matter is information about the content. Like the configuration file, it can be written in TOML, YAML, or JSON. Unlike the configuration file, Hugo doesn’t use the file’s extension to know the format. It looks for markers to signal the type. TOML is surrounded by “`+++`”, YAML by “`---`”, and JSON is enclosed in curly braces. I prefer to use TOML, so you’ll need to translate my examples if you prefer YAML or JSON.
+
+The information in the front matter is passed into the template before the content is rendered into HTML.
+
+#### Markdown
+
+Content is written in Markdown which makes it easier to create the content. Hugo runs the content through a Markdown engine to create the HTML which will be written to the output file.
+
+### Template Files
+
+Hugo uses template files to render content into HTML. Template files are a bridge between the content and presentation. Rules in the template define what content is published, where it's published to, and how it will rendered to the HTML file. The template guides the presentation by specifying the style to use.
+
+There are three types of templates: single, list, and partial. Each type takes a bit of content as input and transforms it based on the commands in the template.
+
+Hugo uses its knowledge of the content to find the template file used to render the content. If it can’t find a template that is an exact match for the content, it will shift up a level and search from there. It will continue to do so until it finds a matching template or runs out of templates to try. If it can’t find a template, it will use the default template for the site.
+
+Please note that you can use the front matter to influence Hugo’s choice of templates.
+
+#### Single Template
+
+A single template is used to render a single piece of content. For example, an article or post would be a single piece of content and use a single template.
+
+#### List Template
+
+A list template renders a group of related content. That could be a summary of recent postings or all articles in a category. List templates can contain multiple groups.
+
+The homepage template is a special type of list template. Hugo assumes that the home page of your site will act as the portal for the rest of the content in the site.
+
+#### Partial Template
+
+A partial template is a template that can be included in other templates. Partial templates must be called using the “partial” template command. They are very handy for rolling up common behavior. For example, your site may have a banner that all pages use. Instead of copying the text of the banner into every single and list template, you could create a partial with the banner in it. That way if you decide to change the banner, you only have to change the partial template.
+
+## Create a New Site
+
+Let's use Hugo to create a new web site. I'm a Mac user, so I'll create mine in my home directory, in the Sites folder. If you're using Linux, you might have to create the folder first.
+
+The "new site" command will create a skeleton of a site. It will give you the basic directory structure and a useable configuration file.
+
+```
+$ hugo new site ~/Sites/zafta
+$ cd ~/Sites/zafta
+$ ls -l
+total 8
+drwxr-xr-x  7 quoha  staff  238 Sep 29 16:49 .
+drwxr-xr-x  3 quoha  staff  102 Sep 29 16:49 ..
+drwxr-xr-x  2 quoha  staff   68 Sep 29 16:49 archetypes
+-rw-r--r--  1 quoha  staff   82 Sep 29 16:49 config.toml
+drwxr-xr-x  2 quoha  staff   68 Sep 29 16:49 content
+drwxr-xr-x  2 quoha  staff   68 Sep 29 16:49 layouts
+drwxr-xr-x  2 quoha  staff   68 Sep 29 16:49 static
+$
+```
+
+Take a look in the content/ directory to confirm that it is empty.
+
+The other directories (archetypes/, layouts/, and static/) are used when customizing a theme. That's a topic for a different tutorial, so please ignore them for now.
+
+### Generate the HTML For the New Site
+
+Running the `hugo` command with no options will read all the available content and generate the HTML files. It will also copy all static files (that's everything that's not content). Since we have an empty site, it won't do much, but it will do it very quickly.
+
+```
+$ hugo --verbose
+INFO: 2014/09/29 Using config file: config.toml
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/static/ to /Users/quoha/Sites/zafta/public/
+WARN: 2014/09/29 Unable to locate layout: [index.html _default/list.html _default/single.html]
+WARN: 2014/09/29 Unable to locate layout: [404.html]
+0 draft content 
+0 future content 
+0 pages created 
+0 tags created
+0 categories created
+in 2 ms
+$ 
+```
+
+The "`--verbose`" flag gives extra information that will be helpful when we build the template. Every line of the output that starts with "INFO:" or "WARN:" is present because we used that flag. The lines that start with "WARN:" are warning messages. We'll go over them later.
+
+We can verify that the command worked by looking at the directory again.
+
+```
+$ ls -l
+total 8
+drwxr-xr-x  2 quoha  staff   68 Sep 29 16:49 archetypes
+-rw-r--r--  1 quoha  staff   82 Sep 29 16:49 config.toml
+drwxr-xr-x  2 quoha  staff   68 Sep 29 16:49 content
+drwxr-xr-x  2 quoha  staff   68 Sep 29 16:49 layouts
+drwxr-xr-x  4 quoha  staff  136 Sep 29 17:02 public
+drwxr-xr-x  2 quoha  staff   68 Sep 29 16:49 static
+$
+```
+
+See that new public/ directory? Hugo placed all generated content there. When you're ready to publish your web site, that's the place to start. For now, though, let's just confirm that we have what we'd expect from a site with no content.
+
+```
+$ ls -l public
+total 16
+-rw-r--r--  1 quoha  staff  416 Sep 29 17:02 index.xml
+-rw-r--r--  1 quoha  staff  262 Sep 29 17:02 sitemap.xml
+$ 
+```
+
+Hugo created two XML files, which is standard, but there are no HTML files.
+
+
+
+### Test the New Site
+
+Verify that you can run the built-in web server. It will dramatically shorten your development cycle if you do. Start it by running the "server" command. If it is successful, you will see output similar to the following:
+
+```
+$ hugo server --verbose
+INFO: 2014/09/29 Using config file: /Users/quoha/Sites/zafta/config.toml
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/static/ to /Users/quoha/Sites/zafta/public/
+WARN: 2014/09/29 Unable to locate layout: [index.html _default/list.html _default/single.html]
+WARN: 2014/09/29 Unable to locate layout: [404.html]
+0 draft content 
+0 future content 
+0 pages created 
+0 tags created
+0 categories created
+in 2 ms
+Serving pages from /Users/quoha/Sites/zafta/public
+Web Server is available at http://localhost:1313
+Press Ctrl+C to stop
+```
+
+Connect to the listed URL (it's on the line that starts with "Web Server"). If everything is working correctly, you should get a page that shows the following:
+
+```
+index.xml
+sitemap.xml
+```
+
+That's a listing of your public/ directory. Hugo didn't create a home page because our site has no content. When there's no index.html file in a directory, the server lists the files in the directory, which is what you should see in your browser.
+
+Let’s go back and look at those warnings again.
+
+```
+WARN: 2014/09/29 Unable to locate layout: [index.html _default/list.html _default/single.html]
+WARN: 2014/09/29 Unable to locate layout: [404.html]
+```
+
+That second warning is easier to explain. We haven’t created a template to be used to generate “page not found errors.” The 404 message is a topic for a separate tutorial.
+
+Now for the first warning. It is for the home page. You can tell because the first layout that it looked for was “index.html.” That’s only used by the home page.
+
+I like that the verbose flag causes Hugo to list the files that it's searching for. For the home page, they are index.html, _default/list.html, and _default/single.html. There are some rules that we'll cover later that explain the names and paths. For now, just remember that Hugo couldn't find a template for the home page and it told you so.
+
+At this point, you've got a working installation and site that we can build upon. All that’s left is to add some content and a theme to display it.
+
+## Create a New Theme
+
+Hugo doesn't ship with a default theme. There are a few available (I counted a dozen when I first installed Hugo) and Hugo comes with a command to create new themes.
+
+We're going to create a new theme called "zafta." Since the goal of this tutorial is to show you how to fill out the files to pull in your content, the theme will not contain any CSS. In other words, ugly but functional.
+
+All themes have opinions on content and layout. For example, Zafta uses "post" over "blog". Strong opinions make for simpler templates but differing opinions make it tougher to use themes. When you build a theme, consider using the terms that other themes do.
+
+
+### Create a Skeleton
+
+Use the hugo "new" command to create the skeleton of a theme. This creates the directory structure and places empty files for you to fill out.
+
+```
+$ hugo new theme zafta
+
+$ ls -l
+total 8
+drwxr-xr-x  2 quoha  staff   68 Sep 29 16:49 archetypes
+-rw-r--r--  1 quoha  staff   82 Sep 29 16:49 config.toml
+drwxr-xr-x  2 quoha  staff   68 Sep 29 16:49 content
+drwxr-xr-x  2 quoha  staff   68 Sep 29 16:49 layouts
+drwxr-xr-x  4 quoha  staff  136 Sep 29 17:02 public
+drwxr-xr-x  2 quoha  staff   68 Sep 29 16:49 static
+drwxr-xr-x  3 quoha  staff  102 Sep 29 17:31 themes
+
+$ find themes -type f | xargs ls -l
+-rw-r--r--  1 quoha  staff  1081 Sep 29 17:31 themes/zafta/LICENSE.md
+-rw-r--r--  1 quoha  staff     0 Sep 29 17:31 themes/zafta/archetypes/default.md
+-rw-r--r--  1 quoha  staff     0 Sep 29 17:31 themes/zafta/layouts/_default/list.html
+-rw-r--r--  1 quoha  staff     0 Sep 29 17:31 themes/zafta/layouts/_default/single.html
+-rw-r--r--  1 quoha  staff     0 Sep 29 17:31 themes/zafta/layouts/index.html
+-rw-r--r--  1 quoha  staff     0 Sep 29 17:31 themes/zafta/layouts/partials/footer.html
+-rw-r--r--  1 quoha  staff     0 Sep 29 17:31 themes/zafta/layouts/partials/header.html
+-rw-r--r--  1 quoha  staff    93 Sep 29 17:31 themes/zafta/theme.toml
+$ 
+```
+
+The skeleton includes templates (the files ending in .html), license file, a description of your theme (the theme.toml file), and an empty archetype.
+
+Please take a minute to fill out the theme.toml and LICENSE.md files. They're optional, but if you're going to be distributing your theme, it tells the world who to praise (or blame). It's also nice to declare the license so that people will know how they can use the theme.
+
+```
+$ vi themes/zafta/theme.toml
+author = "michael d henderson"
+description = "a minimal working template"
+license = "MIT"
+name = "zafta"
+source_repo = ""
+tags = ["tags", "categories"]
+:wq
+
+## also edit themes/zafta/LICENSE.md and change
+## the bit that says "YOUR_NAME_HERE"
+```
+
+Note that the the skeleton's template files are empty. Don't worry, we'll be changing that shortly.
+
+```
+$ find themes/zafta -name '*.html' | xargs ls -l
+-rw-r--r--  1 quoha  staff  0 Sep 29 17:31 themes/zafta/layouts/_default/list.html
+-rw-r--r--  1 quoha  staff  0 Sep 29 17:31 themes/zafta/layouts/_default/single.html
+-rw-r--r--  1 quoha  staff  0 Sep 29 17:31 themes/zafta/layouts/index.html
+-rw-r--r--  1 quoha  staff  0 Sep 29 17:31 themes/zafta/layouts/partials/footer.html
+-rw-r--r--  1 quoha  staff  0 Sep 29 17:31 themes/zafta/layouts/partials/header.html
+$
+```
+
+
+
+### Update the Configuration File to Use the Theme
+
+Now that we've got a theme to work with, it's a good idea to add the theme name to the configuration file. This is optional, because you can always add "-t zafta" on all your commands. I like to put it the configuration file because I like shorter command lines. If you don't put it in the configuration file or specify it on the command line, you won't use the template that you're expecting to.
+
+Edit the file to add the theme, add a title for the site, and specify that all of our content will use the TOML format.
+
+```
+$ vi config.toml
+theme = "zafta"
+baseurl = ""
+languageCode = "en-us"
+title = "zafta - totally refreshing"
+MetaDataFormat = "toml"
+:wq
+
+$
+```
+
+### Generate the Site
+
+Now that we have an empty theme, let's generate the site again.
+
+```
+$ hugo --verbose
+INFO: 2014/09/29 Using config file: /Users/quoha/Sites/zafta/config.toml
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/themes/zafta/static/ to /Users/quoha/Sites/zafta/public/
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/static/ to /Users/quoha/Sites/zafta/public/
+WARN: 2014/09/29 Unable to locate layout: [404.html theme/404.html]
+0 draft content 
+0 future content 
+0 pages created 
+0 tags created
+0 categories created
+in 2 ms
+$
+```
+
+Did you notice that the output is different? The warning message for the home page has disappeared and we have an additional information line saying that Hugo is syncing from the theme's directory.
+
+Let's check the public/ directory to see what Hugo's created.
+
+```
+$ ls -l public
+total 16
+drwxr-xr-x  2 quoha  staff   68 Sep 29 17:56 css
+-rw-r--r--  1 quoha  staff    0 Sep 29 17:56 index.html
+-rw-r--r--  1 quoha  staff  407 Sep 29 17:56 index.xml
+drwxr-xr-x  2 quoha  staff   68 Sep 29 17:56 js
+-rw-r--r--  1 quoha  staff  243 Sep 29 17:56 sitemap.xml
+$
+```
+
+Notice four things:
+
+1. Hugo created a home page. This is the file public/index.html.
+2. Hugo created a css/ directory.
+3. Hugo created a js/ directory.
+4. Hugo claimed that it created 0 pages. It created a file and copied over static files, but didn't create any pages. That's because it considers a "page" to be a file created directly from a content file. It doesn't count things like the index.html files that it creates automatically.
+
+#### The Home Page
+
+Hugo supports many different types of templates. The home page is special because it gets its own type of template and its own template file. The file, layouts/index.html, is used to generate the HTML for the home page. The Hugo documentation says that this is the only required template, but that depends. Hugo's warning message shows that it looks for three different templates:
+
+```
+WARN: 2014/09/29 Unable to locate layout: [index.html _default/list.html _default/single.html]
+```
+
+If it can't find any of these, it completely skips creating the home page. We noticed that when we built the site without having a theme installed.
+
+When Hugo created our theme, it created an empty home page template. Now, when we build the site, Hugo finds the template and uses it to generate the HTML for the home page. Since the template file is empty, the HTML file is empty, too. If the template had any rules in it, then Hugo would have used them to generate the home page.
+
+```
+$ find . -name index.html | xargs ls -l
+-rw-r--r--  1 quoha  staff  0 Sep 29 20:21 ./public/index.html
+-rw-r--r--  1 quoha  staff  0 Sep 29 17:31 ./themes/zafta/layouts/index.html
+$ 
+```
+
+#### The Magic of Static
+
+Hugo does two things when generating the site. It uses templates to transform content into HTML and it copies static files into the site. Unlike content, static files are not transformed. They are copied exactly as they are.
+
+Hugo assumes that your site will use both CSS and JavaScript, so it creates directories in your theme to hold them. Remember opinions? Well, Hugo's opinion is that you'll store your CSS in a directory named css/ and your JavaScript in a directory named js/. If you don't like that, you can change the directory names in your theme directory or even delete them completely. Hugo's nice enough to offer its opinion, then behave nicely if you disagree.
+
+```
+$ find themes/zafta -type d | xargs ls -ld
+drwxr-xr-x  7 quoha  staff  238 Sep 29 17:38 themes/zafta
+drwxr-xr-x  3 quoha  staff  102 Sep 29 17:31 themes/zafta/archetypes
+drwxr-xr-x  5 quoha  staff  170 Sep 29 17:31 themes/zafta/layouts
+drwxr-xr-x  4 quoha  staff  136 Sep 29 17:31 themes/zafta/layouts/_default
+drwxr-xr-x  4 quoha  staff  136 Sep 29 17:31 themes/zafta/layouts/partials
+drwxr-xr-x  4 quoha  staff  136 Sep 29 17:31 themes/zafta/static
+drwxr-xr-x  2 quoha  staff   68 Sep 29 17:31 themes/zafta/static/css
+drwxr-xr-x  2 quoha  staff   68 Sep 29 17:31 themes/zafta/static/js
+$ 
+```
+
+## The Theme Development Cycle
+
+When you're working on a theme, you will make changes in the theme's directory, rebuild the site, and check your changes in the browser. Hugo makes this very easy:
+
+1. Purge the public/ directory.
+2. Run the built in web server in watch mode.
+3. Open your site in a browser.
+4. Update the theme.
+5. Glance at your browser window to see changes.
+6. Return to step 4.
+
+I’ll throw in one more opinion: never work on a theme on a live site. Always work on a copy of your site. Make changes to your theme, test them, then copy them up to your site. For added safety, use a tool like Git to keep a revision history of your content and your theme. Believe me when I say that it is too easy to lose both your mind and your changes.
+
+Check the main Hugo site for information on using Git with Hugo.
+
+### Purge the public/ Directory
+
+When generating the site, Hugo will create new files and update existing ones in the ```public/``` directory. It will not delete files that are no longer used. For example, files that were created in the wrong directory or with the wrong title will remain. If you leave them, you might get confused by them later. I recommend cleaning out your site prior to generating it.
+
+Note: If you're building on an SSD, you should ignore this. Churning on a SSD can be costly.
+
+### Hugo's Watch Option
+
+Hugo's "`--watch`" option will monitor the content/ and your theme directories for changes and rebuild the site automatically.
+
+### Live Reload
+
+Hugo's built in web server supports live reload. As pages are saved on the server, the browser is told to refresh the page. Usually, this happens faster than you can say, "Wow, that's totally amazing."
+
+### Development Commands
+
+Use the following commands as the basis for your workflow.
+
+```
+## purge old files. hugo will recreate the public directory.
+##
+$ rm -rf public
+##
+## run hugo in watch mode
+##
+$ hugo server --watch --verbose
+```
+
+Here's sample output showing Hugo detecting a change to the template for the home page. Once generated, the web browser automatically reloaded the page. I've said this before, it's amazing.
+
+
+```
+$ rm -rf public
+$ hugo server --watch --verbose
+INFO: 2014/09/29 Using config file: /Users/quoha/Sites/zafta/config.toml
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/themes/zafta/static/ to /Users/quoha/Sites/zafta/public/
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/static/ to /Users/quoha/Sites/zafta/public/
+WARN: 2014/09/29 Unable to locate layout: [404.html theme/404.html]
+0 draft content 
+0 future content 
+0 pages created 
+0 tags created
+0 categories created
+in 2 ms
+Watching for changes in /Users/quoha/Sites/zafta/content
+Serving pages from /Users/quoha/Sites/zafta/public
+Web Server is available at http://localhost:1313
+Press Ctrl+C to stop
+INFO: 2014/09/29 File System Event: ["/Users/quoha/Sites/zafta/themes/zafta/layouts/index.html": MODIFY|ATTRIB]
+Change detected, rebuilding site
+
+WARN: 2014/09/29 Unable to locate layout: [404.html theme/404.html]
+0 draft content 
+0 future content 
+0 pages created 
+0 tags created
+0 categories created
+in 1 ms
+```
+
+## Update the Home Page Template
+
+The home page is one of a few special pages that Hugo creates automatically. As mentioned earlier, it looks for one of three files in the theme's layout/ directory:
+
+1. index.html
+2. _default/list.html
+3. _default/single.html
+
+We could update one of the default templates, but a good design decision is to update the most specific template available. That's not a hard and fast rule (in fact, we'll break it a few times in this tutorial), but it is a good generalization.
+
+### Make a Static Home Page
+
+Right now, that page is empty because we don't have any content and we don't have any logic in the template. Let's change that by adding some text to the template.
+
+```
+$ vi themes/zafta/layouts/index.html
+<!DOCTYPE html> 
+<html> 
+<body> 
+  <p>hugo says hello!</p> 
+</body> 
+</html> 
+:wq
+
+$
+```
+
+Build the web site and then verify the results.
+
+```
+$ hugo --verbose
+INFO: 2014/09/29 Using config file: /Users/quoha/Sites/zafta/config.toml
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/themes/zafta/static/ to /Users/quoha/Sites/zafta/public/
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/static/ to /Users/quoha/Sites/zafta/public/
+WARN: 2014/09/29 Unable to locate layout: [404.html theme/404.html]
+0 draft content 
+0 future content 
+0 pages created 
+0 tags created
+0 categories created
+in 2 ms
+
+$ find public -type f -name '*.html' | xargs ls -l
+-rw-r--r--  1 quoha  staff  78 Sep 29 21:26 public/index.html
+
+$ cat public/index.html 
+<!DOCTYPE html> 
+<html> 
+<body> 
+  <p>hugo says hello!</p> 
+</html>
+```
+
+#### Live Reload
+
+Note: If you're running the server with the `--watch` option, you'll see different content in the file:
+
+```
+$ cat public/index.html 
+<!DOCTYPE html> 
+<html> 
+<body> 
+  <p>hugo says hello!</p> 
+<script>document.write('<script src="http://' 
+        + (location.host || 'localhost').split(':')[0] 
+    + ':1313/livereload.js?mindelay=10"></' 
+        + 'script>')</script></body> 
+</html>
+```
+
+When you use `--watch`, the Live Reload script is added by Hugo. Look for live reload in the documentation to see what it does and how to disable it.
+
+### Build a "Dynamic" Home Page
+
+"Dynamic home page?" Hugo's a static web site generator, so this seems an odd thing to say. I mean let's have the home page automatically reflect the content in the site every time Hugo builds it. We'll use iteration in the template to do that.
+
+#### Create New Posts
+
+Now that we have the home page generating static content, let's add some content to the site. We'll display these posts as a list on the home page and on their own page, too.
+
+Hugo has a command to generate a skeleton post, just like it does for sites and themes.
+
+```
+$ hugo --verbose new post/first.md
+INFO: 2014/09/29 Using config file: /Users/quoha/Sites/zafta/config.toml
+INFO: 2014/09/29 attempting to create  post/first.md of post
+INFO: 2014/09/29 curpath: /Users/quoha/Sites/zafta/themes/zafta/archetypes/default.md
+ERROR: 2014/09/29 Unable to Cast <nil> to map[string]interface{}
+
+$ 
+```
+
+That wasn't very nice, was it?
+
+The "new" command uses an archetype to create the post file. Hugo created an empty default archetype file, but that causes an error when there's a theme. For me, the workaround was to create an archetypes file specifically for the post type.
+
+```
+$ vi themes/zafta/archetypes/post.md
++++
+Description = ""
+Tags = []
+Categories = []
++++
+:wq
+
+$ find themes/zafta/archetypes -type f | xargs ls -l
+-rw-r--r--  1 quoha  staff   0 Sep 29 21:53 themes/zafta/archetypes/default.md
+-rw-r--r--  1 quoha  staff  51 Sep 29 21:54 themes/zafta/archetypes/post.md
+
+$ hugo --verbose new post/first.md
+INFO: 2014/09/29 Using config file: /Users/quoha/Sites/zafta/config.toml
+INFO: 2014/09/29 attempting to create  post/first.md of post
+INFO: 2014/09/29 curpath: /Users/quoha/Sites/zafta/themes/zafta/archetypes/post.md
+INFO: 2014/09/29 creating /Users/quoha/Sites/zafta/content/post/first.md
+/Users/quoha/Sites/zafta/content/post/first.md created
+
+$ hugo --verbose new post/second.md
+INFO: 2014/09/29 Using config file: /Users/quoha/Sites/zafta/config.toml
+INFO: 2014/09/29 attempting to create  post/second.md of post
+INFO: 2014/09/29 curpath: /Users/quoha/Sites/zafta/themes/zafta/archetypes/post.md
+INFO: 2014/09/29 creating /Users/quoha/Sites/zafta/content/post/second.md
+/Users/quoha/Sites/zafta/content/post/second.md created
+
+$ ls -l content/post
+total 16
+-rw-r--r--  1 quoha  staff  104 Sep 29 21:54 first.md
+-rw-r--r--  1 quoha  staff  105 Sep 29 21:57 second.md
+
+$ cat content/post/first.md 
++++
+Categories = []
+Description = ""
+Tags = []
+date = "2014-09-29T21:54:53-05:00"
+title = "first"
+
++++
+my first post
+
+$ cat content/post/second.md 
++++
+Categories = []
+Description = ""
+Tags = []
+date = "2014-09-29T21:57:09-05:00"
+title = "second"
+
++++
+my second post
+
+$ 
+```
+
+Build the web site and then verify the results.
+
+```
+$ rm -rf public
+$ hugo --verbose
+INFO: 2014/09/29 Using config file: /Users/quoha/Sites/zafta/config.toml
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/themes/zafta/static/ to /Users/quoha/Sites/zafta/public/
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/static/ to /Users/quoha/Sites/zafta/public/
+INFO: 2014/09/29 found taxonomies: map[string]string{"category":"categories", "tag":"tags"}
+WARN: 2014/09/29 Unable to locate layout: [404.html theme/404.html]
+0 draft content 
+0 future content 
+2 pages created 
+0 tags created
+0 categories created
+in 4 ms
+$
+```
+
+The output says that it created 2 pages. Those are our new posts:
+
+```
+$ find public -type f -name '*.html' | xargs ls -l
+-rw-r--r--  1 quoha  staff  78 Sep 29 22:13 public/index.html
+-rw-r--r--  1 quoha  staff   0 Sep 29 22:13 public/post/first/index.html
+-rw-r--r--  1 quoha  staff   0 Sep 29 22:13 public/post/index.html
+-rw-r--r--  1 quoha  staff   0 Sep 29 22:13 public/post/second/index.html
+$
+```
+
+The new files are empty because because the templates used to generate the content are empty. The homepage doesn't show the new content, either. We have to update the templates to add the posts.
+
+### List and Single Templates
+
+In Hugo, we have three major kinds of templates. There's the home page template that we updated previously. It is used only by the home page. We also have "single" templates which are used to generate output for a single content file. We also have "list" templates that are used to group multiple pieces of content before generating output.
+
+Generally speaking, list templates are named "list.html" and single templates are named "single.html."
+
+There are three other types of templates: partials, content views, and terms. We will not go into much detail on these.
+
+### Add Content to the Homepage
+
+The home page will contain a list of posts. Let's update its template to add the posts that we just created. The logic in the template will run every time we build the site.
+
+```
+$ vi themes/zafta/layouts/index.html 
+<!DOCTYPE html>
+<html>
+<body>
+  {{ range first 10 .Data.Pages }}
+    <h1>{{ .Title }}</h1>
+  {{ end }}
+</body>
+</html>
+:wq
+
+$
+```
+
+Hugo uses the Go template engine. That engine scans the template files for commands which are enclosed between "{{" and "}}". In our template, the commands are:
+
+1. range
+2. .Title
+3. end
+
+The "range" command is an iterator. We're going to use it to go through the first ten pages. Every HTML file that Hugo creates is treated as a page, so looping through the list of pages will look at every file that will be created.
+
+The ".Title" command prints the value of the "title" variable. Hugo pulls it from the front matter in the Markdown file.
+
+The "end" command signals the end of the range iterator. The engine loops back to the top of the iteration when it finds "end." Everything between the "range" and "end" is evaluated every time the engine goes through the iteration. In this file, that would cause the title from the first ten pages to be output as heading level one.
+
+It's helpful to remember that some variables, like .Data, are created before any output files. Hugo loads every content file into the variable and then gives the template a chance to process before creating the HTML files.
+
+Build the web site and then verify the results.
+
+```
+$ rm -rf public
+$ hugo --verbose
+INFO: 2014/09/29 Using config file: /Users/quoha/Sites/zafta/config.toml
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/themes/zafta/static/ to /Users/quoha/Sites/zafta/public/
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/static/ to /Users/quoha/Sites/zafta/public/
+INFO: 2014/09/29 found taxonomies: map[string]string{"tag":"tags", "category":"categories"}
+WARN: 2014/09/29 Unable to locate layout: [404.html theme/404.html]
+0 draft content 
+0 future content 
+2 pages created 
+0 tags created
+0 categories created
+in 4 ms
+$ find public -type f -name '*.html' | xargs ls -l 
+-rw-r--r--  1 quoha  staff  94 Sep 29 22:23 public/index.html
+-rw-r--r--  1 quoha  staff   0 Sep 29 22:23 public/post/first/index.html
+-rw-r--r--  1 quoha  staff   0 Sep 29 22:23 public/post/index.html
+-rw-r--r--  1 quoha  staff   0 Sep 29 22:23 public/post/second/index.html
+$ cat public/index.html 
+<!DOCTYPE html>
+<html>
+<body>
+  
+    <h1>second</h1>
+  
+    <h1>first</h1>
+  
+</body>
+</html>
+$
+```
+
+Congratulations, the home page shows the title of the two posts. The posts themselves are still empty, but let's take a moment to appreciate what we've done. Your template now generates output dynamically. Believe it or not, by inserting the range command inside of those curly braces, you've learned everything you need to know to build a theme. All that's really left is understanding which template will be used to generate each content file and becoming familiar with the commands for the template engine.
+
+And, if that were entirely true, this tutorial would be much shorter. There are a few things to know that will make creating a new template much easier. Don't worry, though, that's all to come.
+
+### Add Content to the Posts
+
+We're working with posts, which are in the content/post/ directory. That means that their section is "post" (and if we don't do something weird, their type is also "post").
+
+Hugo uses the section and type to find the template file for every piece of content. Hugo will first look for a template file that matches the section or type name. If it can't find one, then it will look in the _default/ directory. There are some twists that we'll cover when we get to categories and tags, but for now we can assume that Hugo will try post/single.html, then _default/single.html.
+
+Now that we know the search rule, let's see what we actually have available:
+
+```
+$ find themes/zafta -name single.html | xargs ls -l
+-rw-r--r--  1 quoha  staff  132 Sep 29 17:31 themes/zafta/layouts/_default/single.html
+```
+
+We could create a new template, post/single.html, or change the default. Since we don't know of any other content types, let's start with updating the default.
+
+Remember, any content that we haven't created a template for will end up using this template. That can be good or bad. Bad because I know that we're going to be adding different types of content and we're going to end up undoing some of the changes we've made. It's good because we'll be able to see immediate results. It's also good to start here because we can start to build the basic layout for the site. As we add more content types, we'll refactor this file and move logic around. Hugo makes that fairly painless, so we'll accept the cost and proceed.
+
+Please see the Hugo documentation on template rendering for all the details on determining which template to use. And, as the docs mention, if you're building a single page application (SPA) web site, you can delete all of the other templates and work with just the default single page. That's a refreshing amount of joy right there.
+
+#### Update the Template File
+
+```
+$ vi themes/zafta/layouts/_default/single.html 
+<!DOCTYPE html>
+<html>
+<head>
+  <title>{{ .Title }}</title>
+</head>
+<body>
+  <h1>{{ .Title }}</h1>
+  {{ .Content }}
+</body>
+</html>
+:wq
+
+$
+```
+
+Build the web site and verify the results.
+
+```
+$ rm -rf public
+$ hugo --verbose
+INFO: 2014/09/29 Using config file: /Users/quoha/Sites/zafta/config.toml
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/themes/zafta/static/ to /Users/quoha/Sites/zafta/public/
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/static/ to /Users/quoha/Sites/zafta/public/
+INFO: 2014/09/29 found taxonomies: map[string]string{"tag":"tags", "category":"categories"}
+WARN: 2014/09/29 Unable to locate layout: [404.html theme/404.html]
+0 draft content 
+0 future content 
+2 pages created 
+0 tags created
+0 categories created
+in 4 ms
+
+$ find public -type f -name '*.html' | xargs ls -l
+-rw-r--r--  1 quoha  staff   94 Sep 29 22:40 public/index.html
+-rw-r--r--  1 quoha  staff  125 Sep 29 22:40 public/post/first/index.html
+-rw-r--r--  1 quoha  staff    0 Sep 29 22:40 public/post/index.html
+-rw-r--r--  1 quoha  staff  128 Sep 29 22:40 public/post/second/index.html
+
+$ cat public/post/first/index.html 
+<!DOCTYPE html>
+<html>
+<head>
+  <title>first</title>
+</head>
+<body>
+  <h1>first</h1>
+  <p>my first post</p>
+
+</body>
+</html>
+
+$ cat public/post/second/index.html 
+<!DOCTYPE html>
+<html>
+<head>
+  <title>second</title>
+</head>
+<body>
+  <h1>second</h1>
+  <p>my second post</p>
+
+</body>
+</html>
+$
+```
+
+Notice that the posts now have content. You can go to localhost:1313/post/first to verify.
+
+### Linking to Content
+
+The posts are on the home page. Let's add a link from there to the post. Since this is the home page, we'll update its template.
+
+```
+$ vi themes/zafta/layouts/index.html
+<!DOCTYPE html>
+<html>
+<body>
+  {{ range first 10 .Data.Pages }}
+    <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
+  {{ end }}
+</body>
+</html>
+```
+
+Build the web site and verify the results.
+
+```
+$ rm -rf public
+$ hugo --verbose
+INFO: 2014/09/29 Using config file: /Users/quoha/Sites/zafta/config.toml
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/themes/zafta/static/ to /Users/quoha/Sites/zafta/public/
+INFO: 2014/09/29 syncing from /Users/quoha/Sites/zafta/static/ to /Users/quoha/Sites/zafta/public/
+INFO: 2014/09/29 found taxonomies: map[string]string{"tag":"tags", "category":"categories"}
+WARN: 2014/09/29 Unable to locate layout: [404.html theme/404.html]
+0 draft content 
+0 future content 
+2 pages created 
+0 tags created
+0 categories created
+in 4 ms
+
+$ find public -type f -name '*.html' | xargs ls -l
+-rw-r--r--  1 quoha  staff  149 Sep 29 22:44 public/index.html
+-rw-r--r--  1 quoha  staff  125 Sep 29 22:44 public/post/first/index.html
+-rw-r--r--  1 quoha  staff    0 Sep 29 22:44 public/post/index.html
+-rw-r--r--  1 quoha  staff  128 Sep 29 22:44 public/post/second/index.html
+
+$ cat public/index.html 
+<!DOCTYPE html>
+<html>
+<body>
+  
+    <h1><a href="/post/second/">second</a></h1>
+  
+    <h1><a href="/post/first/">first</a></h1>
+  
+</body>
+</html>
+
+$
+```
+
+### Create a Post Listing
+
+We have the posts displaying on the home page and on their own page. We also have a file public/post/index.html that is empty. Let's make it show a list of all posts (not just the first ten).
+
+We need to decide which template to update. This will be a listing, so it should be a list template. Let's take a quick look and see which list templates are available.
+
+```
+$ find themes/zafta -name list.html | xargs ls -l
+-rw-r--r--  1 quoha  staff  0 Sep 29 17:31 themes/zafta/layouts/_default/list.html
+```
+
+As with the single post, we have to decide to update _default/list.html or create post/list.html. We still don't have multiple content types, so let's stay consistent and update the default list template.
+
+## Creating Top Level Pages
+
+Let's add an "about" page and display it at the top level (as opposed to a sub-level like we did with posts).
+
+The default in Hugo is to use the directory structure of the content/ directory to guide the location of the generated html in the public/ directory. Let's verify that by creating an "about" page at the top level:
+
+```
+$ vi content/about.md 
++++
+title = "about"
+description = "about this site"
+date = "2014-09-27"
+slug = "about time"
++++
+
+## about us
+
+i'm speechless
+:wq
+```
+
+Generate the web site and verify the results.
+
+```
+$ find public -name '*.html' | xargs ls -l
+-rw-rw-r--  1 mdhender  staff   334 Sep 27 15:08 public/about-time/index.html
+-rw-rw-r--  1 mdhender  staff   527 Sep 27 15:08 public/index.html
+-rw-rw-r--  1 mdhender  staff   358 Sep 27 15:08 public/post/first-post/index.html
+-rw-rw-r--  1 mdhender  staff     0 Sep 27 15:08 public/post/index.html
+-rw-rw-r--  1 mdhender  staff   342 Sep 27 15:08 public/post/second-post/index.html
+```
+
+Notice that the page wasn't created at the top level. It was created in a sub-directory named 'about-time/'. That name came from our slug. Hugo will use the slug to name the generated content. It's a reasonable default, by the way, but we can learn a few things by fighting it for this file.
+
+One other thing. Take a look at the home page.
+
+```
+$ cat public/index.html
+<!DOCTYPE html>
+<html>
+<body>
+    <h1><a href="http://localhost:1313/post/theme/">creating a new theme</a></h1>
+    <h1><a href="http://localhost:1313/about-time/">about</a></h1>
+    <h1><a href="http://localhost:1313/post/second-post/">second</a></h1>
+    <h1><a href="http://localhost:1313/post/first-post/">first</a></h1>
+<script>document.write('<script src="http://'
+        + (location.host || 'localhost').split(':')[0]
+		+ ':1313/livereload.js?mindelay=10"></'
+        + 'script>')</script></body>
+</html>
+```
+
+Notice that the "about" link is listed with the posts? That's not desirable, so let's change that first.
+
+```
+$ vi themes/zafta/layouts/index.html
+<!DOCTYPE html>
+<html>
+<body>
+  <h1>posts</h1>
+  {{ range first 10 .Data.Pages }}
+    {{ if eq .Type "post"}}
+      <h2><a href="{{ .Permalink }}">{{ .Title }}</a></h2>
+    {{ end }}
+  {{ end }}
+
+  <h1>pages</h1>
+  {{ range .Data.Pages }}
+    {{ if eq .Type "page" }}
+      <h2><a href="{{ .Permalink }}">{{ .Title }}</a></h2>
+    {{ end }}
+  {{ end }}
+</body>
+</html>
+:wq
+```
+
+Generate the web site and verify the results. The home page has two sections, posts and pages, and each section has the right set of headings and links in it.
+
+But, that about page still renders to about-time/index.html.
+
+```
+$ find public -name '*.html' | xargs ls -l
+-rw-rw-r--  1 mdhender  staff    334 Sep 27 15:33 public/about-time/index.html
+-rw-rw-r--  1 mdhender  staff    645 Sep 27 15:33 public/index.html
+-rw-rw-r--  1 mdhender  staff    358 Sep 27 15:33 public/post/first-post/index.html
+-rw-rw-r--  1 mdhender  staff      0 Sep 27 15:33 public/post/index.html
+-rw-rw-r--  1 mdhender  staff    342 Sep 27 15:33 public/post/second-post/index.html
+```
+
+Knowing that hugo is using the slug to generate the file name, the simplest solution is to change the slug. Let's do it the hard way and change the permalink in the configuration file.
+
+```
+$ vi config.toml
+[permalinks]
+	page = "/:title/"
+	about = "/:filename/"
+```
+
+Generate the web site and verify that this didn't work. Hugo lets "slug" or "URL" override the permalinks setting in the configuration file. Go ahead and comment out the slug in content/about.md, then generate the web site to get it to be created in the right place.
+
+## Sharing Templates
+
+If you've been following along, you probably noticed that posts have titles in the browser and the home page doesn't. That's because we didn't put the title in the home page's template (layouts/index.html). That's an easy thing to do, but let's look at a different option.
+
+We can put the common bits into a shared template that's stored in the themes/zafta/layouts/partials/ directory.
+
+### Create the Header and Footer Partials
+
+In Hugo, a partial is a sugar-coated template. Normally a template reference has a path specified. Partials are different. Hugo searches for them along a TODO defined search path. This makes it easier for end-users to override the theme's presentation.
+
+```
+$ vi themes/zafta/layouts/partials/header.html
+<!DOCTYPE html>
+<html>
+<head>
+	<title>{{ .Title }}</title>
+</head>
+<body>
+:wq
+
+$ vi themes/zafta/layouts/partials/footer.html
+</body>
+</html>
+:wq
+```
+
+### Update the Home Page Template to Use the Partials
+
+The most noticeable difference between a template call and a partials call is the lack of path:
+
+```
+{{ template "theme/partials/header.html" . }}
+```
+versus
+```
+{{ partial "header.html" . }}
+```
+Both pass in the context.
+
+Let's change the home page template to use these new partials.
+
+```
+$ vi themes/zafta/layouts/index.html
+{{ partial "header.html" . }}
+
+  <h1>posts</h1>
+  {{ range first 10 .Data.Pages }}
+    {{ if eq .Type "post"}}
+      <h2><a href="{{ .Permalink }}">{{ .Title }}</a></h2>
+    {{ end }}
+  {{ end }}
+
+  <h1>pages</h1>
+  {{ range .Data.Pages }}
+    {{ if or (eq .Type "page") (eq .Type "about") }}
+      <h2><a href="{{ .Permalink }}">{{ .Type }} - {{ .Title }} - {{ .RelPermalink }}</a></h2>
+    {{ end }}
+  {{ end }}
+
+{{ partial "footer.html" . }}
+:wq
+```
+
+Generate the web site and verify the results. The title on the home page is now "your title here", which comes from the "title" variable in the config.toml file.
+
+### Update the Default Single Template to Use the Partials
+
+```
+$ vi themes/zafta/layouts/_default/single.html
+{{ partial "header.html" . }}
+
+  <h1>{{ .Title }}</h1>
+  {{ .Content }}
+
+{{ partial "footer.html" . }}
+:wq
+```
+
+Generate the web site and verify the results. The title on the posts and the about page should both reflect the value in the markdown file.
+
+## Add “Date Published” to Posts
+
+It's common to have posts display the date that they were written or published, so let's add that. The front matter of our posts has a variable named "date." It's usually the date the content was created, but let's pretend that's the value we want to display.
+
+### Add “Date Published” to the Template
+
+We'll start by updating the template used to render the posts. The template code will look like:
+
+```
+{{ .Date.Format "Mon, Jan 2, 2006" }}
+```
+
+Posts use the default single template, so we'll change that file.
+
+```
+$ vi themes/zafta/layouts/_default/single.html
+{{ partial "header.html" . }}
+
+  <h1>{{ .Title }}</h1>
+  <h2>{{ .Date.Format "Mon, Jan 2, 2006" }}</h2>
+  {{ .Content }}
+
+{{ partial "footer.html" . }}
+:wq
+```
+
+Generate the web site and verify the results. The posts now have the date displayed in them. There's a problem, though. The "about" page also has the date displayed.
+
+As usual, there are a couple of ways to make the date display only on posts. We could do an "if" statement like we did on the home page. Another way would be to create a separate template for posts.
+
+The "if" solution works for sites that have just a couple of content types. It aligns with the principle of "code for today," too.
+
+Let's assume, though, that we've made our site so complex that we feel we have to create a new template type. In Hugo-speak, we're going to create a section template.
+
+Let's restore the default single template before we forget.
+
+```
+$ mkdir themes/zafta/layouts/post
+$ vi themes/zafta/layouts/_default/single.html
+{{ partial "header.html" . }}
+
+  <h1>{{ .Title }}</h1>
+  {{ .Content }}
+
+{{ partial "footer.html" . }}
+:wq
+```
+
+Now we'll update the post's version of the single template. If you remember Hugo's rules, the template engine will use this version over the default.
+
+```
+$ vi themes/zafta/layouts/post/single.html
+{{ partial "header.html" . }}
+
+  <h1>{{ .Title }}</h1>
+  <h2>{{ .Date.Format "Mon, Jan 2, 2006" }}</h2>
+  {{ .Content }}
+
+{{ partial "footer.html" . }}
+:wq
+
+```
+
+Note that we removed the date logic from the default template and put it in the post template. Generate the web site and verify the results. Posts have dates and the about page doesn't.
+
+### Don't Repeat Yourself
+
+DRY is a good design goal and Hugo does a great job supporting it. Part of the art of a good template is knowing when to add a new template and when to update an existing one. While you're figuring that out, accept that you'll be doing some refactoring. Hugo makes that easy and fast, so it's okay to delay splitting up a template.

+ 344 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/goisforlovers.de.md

@@ -0,0 +1,344 @@
++++
+title = "(Hu)go Template Primer"
+description = ""
+tags = [
+    "go",
+    "golang",
+    "templates",
+    "themes",
+    "development",
+    "demo",
+]
+date = "2014-04-02"
+categories = [
+    "Development",
+    "golang",
+]
++++
+
+Hugo uses the excellent [go][] [html/template][gohtmltemplate] library for
+its template engine. It is an extremely lightweight engine that provides a very
+small amount of logic. In our experience that it is just the right amount of
+logic to be able to create a good static website. If you have used other
+template systems from different languages or frameworks you will find a lot of
+similarities in go templates.
+
+This document is a brief primer on using go templates. The [go docs][gohtmltemplate]
+provide more details.
+
+# Introduction to Go Templates
+
+Go templates provide an extremely simple template language. It adheres to the
+belief that only the most basic of logic belongs in the template or view layer.
+One consequence of this simplicity is that go templates parse very quickly.
+
+A unique characteristic of go templates is they are content aware. Variables and
+content will be sanitized depending on the context of where they are used. More
+details can be found in the [go docs][gohtmltemplate].
+
+## Basic Syntax
+
+Go lang templates are html files with the addition of variables and
+functions. 
+
+**Go variables and functions are accessible within {{ }}**
+
+Accessing a predefined variable "foo":
+
+    {{ foo }}
+
+**Parameters are separated using spaces**
+
+Calling the add function with input of 1, 2:
+
+    {{ add 1 2 }}
+
+**Methods and fields are accessed via dot notation**
+
+Accessing the Page Parameter "bar"
+
+    {{ .Params.bar }}
+
+**Parentheses can be used to group items together**
+
+    {{ if or (isset .Params "alt") (isset .Params "caption") }} Caption {{ end }}
+
+
+## Variables
+
+Each go template has a struct (object) made available to it. In hugo each
+template is passed either a page or a node struct depending on which type of
+page you are rendering. More details are available on the
+[variables](/layout/variables) page.
+
+A variable is accessed by referencing the variable name.
+
+    <title>{{ .Title }}</title>
+
+Variables can also be defined and referenced.
+
+    {{ $address := "123 Main St."}}
+    {{ $address }}
+
+
+## Functions
+
+Go template ship with a few functions which provide basic functionality. The go
+template system also provides a mechanism for applications to extend the
+available functions with their own. [Hugo template
+functions](/layout/functions) provide some additional functionality we believe
+are useful for building websites. Functions are called by using their name
+followed by the required parameters separated by spaces. Template
+functions cannot be added without recompiling hugo.
+
+**Example:**
+
+    {{ add 1 2 }}
+
+## Includes
+
+When including another template you will pass to it the data it will be
+able to access. To pass along the current context please remember to
+include a trailing dot. The templates location will always be starting at
+the /layout/ directory within Hugo.
+
+**Example:**
+
+    {{ template "chrome/header.html" . }}
+
+
+## Logic
+
+Go templates provide the most basic iteration and conditional logic.
+
+### Iteration 
+
+Just like in go, the go templates make heavy use of range to iterate over
+a map, array or slice. The following are different examples of how to use
+range.
+
+**Example 1: Using Context**
+
+    {{ range array }} 
+        {{ . }}
+    {{ end }}
+
+**Example 2: Declaring value variable name**
+
+    {{range $element := array}} 
+        {{ $element }} 
+    {{ end }}
+
+**Example 2: Declaring key and value variable name**
+
+    {{range $index, $element := array}}
+        {{ $index }} 
+        {{ $element }} 
+    {{ end }}
+
+### Conditionals 
+
+If, else, with, or, & and provide the framework for handling conditional
+logic in Go Templates. Like range, each statement is closed with `end`.
+
+
+Go Templates treat the following values as false: 
+
+* false
+* 0 
+* any array, slice, map, or string of length zero
+
+**Example 1: If**
+
+    {{ if isset .Params "title" }}<h4>{{ index .Params "title" }}</h4>{{ end }}
+
+**Example 2: If -> Else** 
+
+    {{ if isset .Params "alt" }} 
+        {{ index .Params "alt" }}
+    {{else}}
+        {{ index .Params "caption" }}
+    {{ end }}
+
+**Example 3: And & Or**
+
+    {{ if and (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr")}}
+
+**Example 4: With**
+
+An alternative way of writing "if" and then referencing the same value
+is to use "with" instead. With rebinds the context `.` within its scope,
+and skips the block if the variable is absent.
+
+The first example above could be simplified as:
+
+    {{ with .Params.title }}<h4>{{ . }}</h4>{{ end }}
+
+**Example 5: If -> Else If** 
+
+    {{ if isset .Params "alt" }} 
+        {{ index .Params "alt" }}
+    {{ else if isset .Params "caption" }}
+        {{ index .Params "caption" }}
+    {{ end }}
+
+## Pipes
+
+One of the most powerful components of go templates is the ability to
+stack actions one after another. This is done by using pipes. Borrowed
+from unix pipes, the concept is simple, each pipeline's output becomes the
+input of the following pipe. 
+
+Because of the very simple syntax of go templates, the pipe is essential
+to being able to chain together function calls. One limitation of the
+pipes is that they only can work with a single value and that value
+becomes the last parameter of the next pipeline. 
+
+A few simple examples should help convey how to use the pipe.
+
+**Example 1 :**
+
+    {{ if eq 1 1 }} Same {{ end }}
+
+is the same as 
+
+    {{ eq 1 1 | if }} Same {{ end }}
+
+It does look odd to place the if at the end, but it does provide a good
+illustration of how to use the pipes.
+
+**Example 2 :**
+
+    {{ index .Params "disqus_url" | html }}
+
+Access the page parameter called "disqus_url" and escape the HTML.
+
+**Example 3 :**
+
+    {{ if or (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr")}}
+    Stuff Here
+    {{ end }}
+
+Could be rewritten as 
+
+    {{  isset .Params "caption" | or isset .Params "title" | or isset .Params "attr" | if }}
+    Stuff Here 
+    {{ end }}
+
+
+## Context (aka. the dot)
+
+The most easily overlooked concept to understand about go templates is that {{ . }}
+always refers to the current context. In the top level of your template this
+will be the data set made available to it. Inside of a iteration it will have
+the value of the current item. When inside of a loop the context has changed. .
+will no longer refer to the data available to the entire page. If you need to
+access this from within the loop you will likely want to set it to a variable
+instead of depending on the context.
+
+**Example:**
+
+      {{ $title := .Site.Title }}
+      {{ range .Params.tags }}
+        <li> <a href="{{ $baseurl }}/tags/{{ . | urlize }}">{{ . }}</a> - {{ $title }} </li>
+      {{ end }}
+
+Notice how once we have entered the loop the value of {{ . }} has changed. We
+have defined a variable outside of the loop so we have access to it from within
+the loop.
+
+# Hugo Parameters 
+
+Hugo provides the option of passing values to the template language
+through the site configuration (for sitewide values), or through the meta
+data of each specific piece of content. You can define any values of any
+type (supported by your front matter/config format) and use them however
+you want to inside of your templates. 
+
+
+## Using Content (page) Parameters 
+
+In each piece of content you can provide variables to be used by the
+templates. This happens in the [front matter](/content/front-matter). 
+
+An example of this is used in this documentation site. Most of the pages
+benefit from having the table of contents provided. Sometimes the TOC just
+doesn't make a lot of sense. We've defined a variable in our front matter
+of some pages to turn off the TOC from being displayed. 
+
+Here is the example front matter:
+
+```
+---
+title: "Permalinks"
+date: "2013-11-18"
+aliases:
+  - "/doc/permalinks/"
+groups: ["extras"]
+groups_weight: 30
+notoc: true
+---
+```
+
+Here is the corresponding code inside of the template:
+
+      {{ if not .Params.notoc }}
+        <div id="toc" class="well col-md-4 col-sm-6">
+        {{ .TableOfContents }}
+        </div>
+      {{ end }}
+
+
+
+## Using Site (config) Parameters
+In your top-level configuration file (eg, `config.yaml`) you can define site
+parameters, which are values which will be available to you in chrome.
+
+For instance, you might declare:
+
+```yaml
+params:
+  CopyrightHTML: "Copyright &#xA9; 2013 John Doe. All Rights Reserved."
+  TwitterUser: "spf13"
+  SidebarRecentLimit: 5
+```
+
+Within a footer layout, you might then declare a `<footer>` which is only
+provided if the `CopyrightHTML` parameter is provided, and if it is given,
+you would declare it to be HTML-safe, so that the HTML entity is not escaped
+again.  This would let you easily update just your top-level config file each
+January 1st, instead of hunting through your templates.
+
+```
+{{if .Site.Params.CopyrightHTML}}<footer>
+<div class="text-center">{{.Site.Params.CopyrightHTML | safeHtml}}</div>
+</footer>{{end}}
+```
+
+An alternative way of writing the "if" and then referencing the same value
+is to use "with" instead. With rebinds the context `.` within its scope,
+and skips the block if the variable is absent:
+
+```
+{{with .Site.Params.TwitterUser}}<span class="twitter">
+<a href="https://twitter.com/{{.}}" rel="author">
+<img src="/images/twitter.png" width="48" height="48" title="Twitter: {{.}}"
+ alt="Twitter"></a>
+</span>{{end}}
+```
+
+Finally, if you want to pull "magic constants" out of your layouts, you can do
+so, such as in this example:
+
+```
+<nav class="recent">
+  <h1>Recent Posts</h1>
+  <ul>{{range first .Site.Params.SidebarRecentLimit .Site.Recent}}
+    <li><a href="{{.RelPermalink}}">{{.Title}}</a></li>
+  {{end}}</ul>
+</nav>
+```
+
+
+[go]: <http://golang.org/>
+[gohtmltemplate]: <http://golang.org/pkg/html/template/>

+ 344 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/goisforlovers.es.md

@@ -0,0 +1,344 @@
++++
+title = "(Hu)go Template Primer"
+description = ""
+tags = [
+    "go",
+    "golang",
+    "templates",
+    "themes",
+    "development",
+    "demo",
+]
+date = "2014-04-02"
+categories = [
+    "Development",
+    "golang",
+]
++++
+
+Hugo uses the excellent [go][] [html/template][gohtmltemplate] library for
+its template engine. It is an extremely lightweight engine that provides a very
+small amount of logic. In our experience that it is just the right amount of
+logic to be able to create a good static website. If you have used other
+template systems from different languages or frameworks you will find a lot of
+similarities in go templates.
+
+This document is a brief primer on using go templates. The [go docs][gohtmltemplate]
+provide more details.
+
+# Introduction to Go Templates
+
+Go templates provide an extremely simple template language. It adheres to the
+belief that only the most basic of logic belongs in the template or view layer.
+One consequence of this simplicity is that go templates parse very quickly.
+
+A unique characteristic of go templates is they are content aware. Variables and
+content will be sanitized depending on the context of where they are used. More
+details can be found in the [go docs][gohtmltemplate].
+
+## Basic Syntax
+
+Go lang templates are html files with the addition of variables and
+functions. 
+
+**Go variables and functions are accessible within {{ }}**
+
+Accessing a predefined variable "foo":
+
+    {{ foo }}
+
+**Parameters are separated using spaces**
+
+Calling the add function with input of 1, 2:
+
+    {{ add 1 2 }}
+
+**Methods and fields are accessed via dot notation**
+
+Accessing the Page Parameter "bar"
+
+    {{ .Params.bar }}
+
+**Parentheses can be used to group items together**
+
+    {{ if or (isset .Params "alt") (isset .Params "caption") }} Caption {{ end }}
+
+
+## Variables
+
+Each go template has a struct (object) made available to it. In hugo each
+template is passed either a page or a node struct depending on which type of
+page you are rendering. More details are available on the
+[variables](/layout/variables) page.
+
+A variable is accessed by referencing the variable name.
+
+    <title>{{ .Title }}</title>
+
+Variables can also be defined and referenced.
+
+    {{ $address := "123 Main St."}}
+    {{ $address }}
+
+
+## Functions
+
+Go template ship with a few functions which provide basic functionality. The go
+template system also provides a mechanism for applications to extend the
+available functions with their own. [Hugo template
+functions](/layout/functions) provide some additional functionality we believe
+are useful for building websites. Functions are called by using their name
+followed by the required parameters separated by spaces. Template
+functions cannot be added without recompiling hugo.
+
+**Example:**
+
+    {{ add 1 2 }}
+
+## Includes
+
+When including another template you will pass to it the data it will be
+able to access. To pass along the current context please remember to
+include a trailing dot. The templates location will always be starting at
+the /layout/ directory within Hugo.
+
+**Example:**
+
+    {{ template "chrome/header.html" . }}
+
+
+## Logic
+
+Go templates provide the most basic iteration and conditional logic.
+
+### Iteration 
+
+Just like in go, the go templates make heavy use of range to iterate over
+a map, array or slice. The following are different examples of how to use
+range.
+
+**Example 1: Using Context**
+
+    {{ range array }} 
+        {{ . }}
+    {{ end }}
+
+**Example 2: Declaring value variable name**
+
+    {{range $element := array}} 
+        {{ $element }} 
+    {{ end }}
+
+**Example 2: Declaring key and value variable name**
+
+    {{range $index, $element := array}}
+        {{ $index }} 
+        {{ $element }} 
+    {{ end }}
+
+### Conditionals 
+
+If, else, with, or, & and provide the framework for handling conditional
+logic in Go Templates. Like range, each statement is closed with `end`.
+
+
+Go Templates treat the following values as false: 
+
+* false
+* 0 
+* any array, slice, map, or string of length zero
+
+**Example 1: If**
+
+    {{ if isset .Params "title" }}<h4>{{ index .Params "title" }}</h4>{{ end }}
+
+**Example 2: If -> Else** 
+
+    {{ if isset .Params "alt" }} 
+        {{ index .Params "alt" }}
+    {{else}}
+        {{ index .Params "caption" }}
+    {{ end }}
+
+**Example 3: And & Or**
+
+    {{ if and (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr")}}
+
+**Example 4: With**
+
+An alternative way of writing "if" and then referencing the same value
+is to use "with" instead. With rebinds the context `.` within its scope,
+and skips the block if the variable is absent.
+
+The first example above could be simplified as:
+
+    {{ with .Params.title }}<h4>{{ . }}</h4>{{ end }}
+
+**Example 5: If -> Else If** 
+
+    {{ if isset .Params "alt" }} 
+        {{ index .Params "alt" }}
+    {{ else if isset .Params "caption" }}
+        {{ index .Params "caption" }}
+    {{ end }}
+
+## Pipes
+
+One of the most powerful components of go templates is the ability to
+stack actions one after another. This is done by using pipes. Borrowed
+from unix pipes, the concept is simple, each pipeline's output becomes the
+input of the following pipe. 
+
+Because of the very simple syntax of go templates, the pipe is essential
+to being able to chain together function calls. One limitation of the
+pipes is that they only can work with a single value and that value
+becomes the last parameter of the next pipeline. 
+
+A few simple examples should help convey how to use the pipe.
+
+**Example 1 :**
+
+    {{ if eq 1 1 }} Same {{ end }}
+
+is the same as 
+
+    {{ eq 1 1 | if }} Same {{ end }}
+
+It does look odd to place the if at the end, but it does provide a good
+illustration of how to use the pipes.
+
+**Example 2 :**
+
+    {{ index .Params "disqus_url" | html }}
+
+Access the page parameter called "disqus_url" and escape the HTML.
+
+**Example 3 :**
+
+    {{ if or (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr")}}
+    Stuff Here
+    {{ end }}
+
+Could be rewritten as 
+
+    {{  isset .Params "caption" | or isset .Params "title" | or isset .Params "attr" | if }}
+    Stuff Here 
+    {{ end }}
+
+
+## Context (aka. the dot)
+
+The most easily overlooked concept to understand about go templates is that {{ . }}
+always refers to the current context. In the top level of your template this
+will be the data set made available to it. Inside of a iteration it will have
+the value of the current item. When inside of a loop the context has changed. .
+will no longer refer to the data available to the entire page. If you need to
+access this from within the loop you will likely want to set it to a variable
+instead of depending on the context.
+
+**Example:**
+
+      {{ $title := .Site.Title }}
+      {{ range .Params.tags }}
+        <li> <a href="{{ $baseurl }}/tags/{{ . | urlize }}">{{ . }}</a> - {{ $title }} </li>
+      {{ end }}
+
+Notice how once we have entered the loop the value of {{ . }} has changed. We
+have defined a variable outside of the loop so we have access to it from within
+the loop.
+
+# Hugo Parameters 
+
+Hugo provides the option of passing values to the template language
+through the site configuration (for sitewide values), or through the meta
+data of each specific piece of content. You can define any values of any
+type (supported by your front matter/config format) and use them however
+you want to inside of your templates. 
+
+
+## Using Content (page) Parameters 
+
+In each piece of content you can provide variables to be used by the
+templates. This happens in the [front matter](/content/front-matter). 
+
+An example of this is used in this documentation site. Most of the pages
+benefit from having the table of contents provided. Sometimes the TOC just
+doesn't make a lot of sense. We've defined a variable in our front matter
+of some pages to turn off the TOC from being displayed. 
+
+Here is the example front matter:
+
+```
+---
+title: "Permalinks"
+date: "2013-11-18"
+aliases:
+  - "/doc/permalinks/"
+groups: ["extras"]
+groups_weight: 30
+notoc: true
+---
+```
+
+Here is the corresponding code inside of the template:
+
+      {{ if not .Params.notoc }}
+        <div id="toc" class="well col-md-4 col-sm-6">
+        {{ .TableOfContents }}
+        </div>
+      {{ end }}
+
+
+
+## Using Site (config) Parameters
+In your top-level configuration file (eg, `config.yaml`) you can define site
+parameters, which are values which will be available to you in chrome.
+
+For instance, you might declare:
+
+```yaml
+params:
+  CopyrightHTML: "Copyright &#xA9; 2013 John Doe. All Rights Reserved."
+  TwitterUser: "spf13"
+  SidebarRecentLimit: 5
+```
+
+Within a footer layout, you might then declare a `<footer>` which is only
+provided if the `CopyrightHTML` parameter is provided, and if it is given,
+you would declare it to be HTML-safe, so that the HTML entity is not escaped
+again.  This would let you easily update just your top-level config file each
+January 1st, instead of hunting through your templates.
+
+```
+{{if .Site.Params.CopyrightHTML}}<footer>
+<div class="text-center">{{.Site.Params.CopyrightHTML | safeHtml}}</div>
+</footer>{{end}}
+```
+
+An alternative way of writing the "if" and then referencing the same value
+is to use "with" instead. With rebinds the context `.` within its scope,
+and skips the block if the variable is absent:
+
+```
+{{with .Site.Params.TwitterUser}}<span class="twitter">
+<a href="https://twitter.com/{{.}}" rel="author">
+<img src="/images/twitter.png" width="48" height="48" title="Twitter: {{.}}"
+ alt="Twitter"></a>
+</span>{{end}}
+```
+
+Finally, if you want to pull "magic constants" out of your layouts, you can do
+so, such as in this example:
+
+```
+<nav class="recent">
+  <h1>Recent Posts</h1>
+  <ul>{{range first .Site.Params.SidebarRecentLimit .Site.Recent}}
+    <li><a href="{{.RelPermalink}}">{{.Title}}</a></li>
+  {{end}}</ul>
+</nav>
+```
+
+
+[go]: <http://golang.org/>
+[gohtmltemplate]: <http://golang.org/pkg/html/template/>

+ 344 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/goisforlovers.md

@@ -0,0 +1,344 @@
++++
+title = "(Hu)go Template Primer"
+description = ""
+tags = [
+    "go",
+    "golang",
+    "templates",
+    "themes",
+    "development",
+    "demo",
+]
+date = "2014-04-02"
+categories = [
+    "Development",
+    "golang",
+]
++++
+
+Hugo uses the excellent [go][] [html/template][gohtmltemplate] library for
+its template engine. It is an extremely lightweight engine that provides a very
+small amount of logic. In our experience that it is just the right amount of
+logic to be able to create a good static website. If you have used other
+template systems from different languages or frameworks you will find a lot of
+similarities in go templates.
+
+This document is a brief primer on using go templates. The [go docs][gohtmltemplate]
+provide more details.
+
+# Introduction to Go Templates
+
+Go templates provide an extremely simple template language. It adheres to the
+belief that only the most basic of logic belongs in the template or view layer.
+One consequence of this simplicity is that go templates parse very quickly.
+
+A unique characteristic of go templates is they are content aware. Variables and
+content will be sanitized depending on the context of where they are used. More
+details can be found in the [go docs][gohtmltemplate].
+
+## Basic Syntax
+
+Go lang templates are html files with the addition of variables and
+functions. 
+
+**Go variables and functions are accessible within {{ }}**
+
+Accessing a predefined variable "foo":
+
+    {{ foo }}
+
+**Parameters are separated using spaces**
+
+Calling the add function with input of 1, 2:
+
+    {{ add 1 2 }}
+
+**Methods and fields are accessed via dot notation**
+
+Accessing the Page Parameter "bar"
+
+    {{ .Params.bar }}
+
+**Parentheses can be used to group items together**
+
+    {{ if or (isset .Params "alt") (isset .Params "caption") }} Caption {{ end }}
+
+
+## Variables
+
+Each go template has a struct (object) made available to it. In hugo each
+template is passed either a page or a node struct depending on which type of
+page you are rendering. More details are available on the
+[variables](/layout/variables) page.
+
+A variable is accessed by referencing the variable name.
+
+    <title>{{ .Title }}</title>
+
+Variables can also be defined and referenced.
+
+    {{ $address := "123 Main St."}}
+    {{ $address }}
+
+
+## Functions
+
+Go template ship with a few functions which provide basic functionality. The go
+template system also provides a mechanism for applications to extend the
+available functions with their own. [Hugo template
+functions](/layout/functions) provide some additional functionality we believe
+are useful for building websites. Functions are called by using their name
+followed by the required parameters separated by spaces. Template
+functions cannot be added without recompiling hugo.
+
+**Example:**
+
+    {{ add 1 2 }}
+
+## Includes
+
+When including another template you will pass to it the data it will be
+able to access. To pass along the current context please remember to
+include a trailing dot. The templates location will always be starting at
+the /layout/ directory within Hugo.
+
+**Example:**
+
+    {{ template "chrome/header.html" . }}
+
+
+## Logic
+
+Go templates provide the most basic iteration and conditional logic.
+
+### Iteration 
+
+Just like in go, the go templates make heavy use of range to iterate over
+a map, array or slice. The following are different examples of how to use
+range.
+
+**Example 1: Using Context**
+
+    {{ range array }} 
+        {{ . }}
+    {{ end }}
+
+**Example 2: Declaring value variable name**
+
+    {{range $element := array}} 
+        {{ $element }} 
+    {{ end }}
+
+**Example 2: Declaring key and value variable name**
+
+    {{range $index, $element := array}}
+        {{ $index }} 
+        {{ $element }} 
+    {{ end }}
+
+### Conditionals 
+
+If, else, with, or, & and provide the framework for handling conditional
+logic in Go Templates. Like range, each statement is closed with `end`.
+
+
+Go Templates treat the following values as false: 
+
+* false
+* 0 
+* any array, slice, map, or string of length zero
+
+**Example 1: If**
+
+    {{ if isset .Params "title" }}<h4>{{ index .Params "title" }}</h4>{{ end }}
+
+**Example 2: If -> Else** 
+
+    {{ if isset .Params "alt" }} 
+        {{ index .Params "alt" }}
+    {{else}}
+        {{ index .Params "caption" }}
+    {{ end }}
+
+**Example 3: And & Or**
+
+    {{ if and (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr")}}
+
+**Example 4: With**
+
+An alternative way of writing "if" and then referencing the same value
+is to use "with" instead. With rebinds the context `.` within its scope,
+and skips the block if the variable is absent.
+
+The first example above could be simplified as:
+
+    {{ with .Params.title }}<h4>{{ . }}</h4>{{ end }}
+
+**Example 5: If -> Else If** 
+
+    {{ if isset .Params "alt" }} 
+        {{ index .Params "alt" }}
+    {{ else if isset .Params "caption" }}
+        {{ index .Params "caption" }}
+    {{ end }}
+
+## Pipes
+
+One of the most powerful components of go templates is the ability to
+stack actions one after another. This is done by using pipes. Borrowed
+from unix pipes, the concept is simple, each pipeline's output becomes the
+input of the following pipe. 
+
+Because of the very simple syntax of go templates, the pipe is essential
+to being able to chain together function calls. One limitation of the
+pipes is that they only can work with a single value and that value
+becomes the last parameter of the next pipeline. 
+
+A few simple examples should help convey how to use the pipe.
+
+**Example 1 :**
+
+    {{ if eq 1 1 }} Same {{ end }}
+
+is the same as 
+
+    {{ eq 1 1 | if }} Same {{ end }}
+
+It does look odd to place the if at the end, but it does provide a good
+illustration of how to use the pipes.
+
+**Example 2 :**
+
+    {{ index .Params "disqus_url" | html }}
+
+Access the page parameter called "disqus_url" and escape the HTML.
+
+**Example 3 :**
+
+    {{ if or (or (isset .Params "title") (isset .Params "caption")) (isset .Params "attr")}}
+    Stuff Here
+    {{ end }}
+
+Could be rewritten as 
+
+    {{  isset .Params "caption" | or isset .Params "title" | or isset .Params "attr" | if }}
+    Stuff Here 
+    {{ end }}
+
+
+## Context (aka. the dot)
+
+The most easily overlooked concept to understand about go templates is that {{ . }}
+always refers to the current context. In the top level of your template this
+will be the data set made available to it. Inside of a iteration it will have
+the value of the current item. When inside of a loop the context has changed. .
+will no longer refer to the data available to the entire page. If you need to
+access this from within the loop you will likely want to set it to a variable
+instead of depending on the context.
+
+**Example:**
+
+      {{ $title := .Site.Title }}
+      {{ range .Params.tags }}
+        <li> <a href="{{ $baseurl }}/tags/{{ . | urlize }}">{{ . }}</a> - {{ $title }} </li>
+      {{ end }}
+
+Notice how once we have entered the loop the value of {{ . }} has changed. We
+have defined a variable outside of the loop so we have access to it from within
+the loop.
+
+# Hugo Parameters 
+
+Hugo provides the option of passing values to the template language
+through the site configuration (for sitewide values), or through the meta
+data of each specific piece of content. You can define any values of any
+type (supported by your front matter/config format) and use them however
+you want to inside of your templates. 
+
+
+## Using Content (page) Parameters 
+
+In each piece of content you can provide variables to be used by the
+templates. This happens in the [front matter](/content/front-matter). 
+
+An example of this is used in this documentation site. Most of the pages
+benefit from having the table of contents provided. Sometimes the TOC just
+doesn't make a lot of sense. We've defined a variable in our front matter
+of some pages to turn off the TOC from being displayed. 
+
+Here is the example front matter:
+
+```
+---
+title: "Permalinks"
+date: "2013-11-18"
+aliases:
+  - "/doc/permalinks/"
+groups: ["extras"]
+groups_weight: 30
+notoc: true
+---
+```
+
+Here is the corresponding code inside of the template:
+
+      {{ if not .Params.notoc }}
+        <div id="toc" class="well col-md-4 col-sm-6">
+        {{ .TableOfContents }}
+        </div>
+      {{ end }}
+
+
+
+## Using Site (config) Parameters
+In your top-level configuration file (eg, `config.yaml`) you can define site
+parameters, which are values which will be available to you in chrome.
+
+For instance, you might declare:
+
+```yaml
+params:
+  CopyrightHTML: "Copyright &#xA9; 2013 John Doe. All Rights Reserved."
+  TwitterUser: "spf13"
+  SidebarRecentLimit: 5
+```
+
+Within a footer layout, you might then declare a `<footer>` which is only
+provided if the `CopyrightHTML` parameter is provided, and if it is given,
+you would declare it to be HTML-safe, so that the HTML entity is not escaped
+again.  This would let you easily update just your top-level config file each
+January 1st, instead of hunting through your templates.
+
+```
+{{if .Site.Params.CopyrightHTML}}<footer>
+<div class="text-center">{{.Site.Params.CopyrightHTML | safeHtml}}</div>
+</footer>{{end}}
+```
+
+An alternative way of writing the "if" and then referencing the same value
+is to use "with" instead. With rebinds the context `.` within its scope,
+and skips the block if the variable is absent:
+
+```
+{{with .Site.Params.TwitterUser}}<span class="twitter">
+<a href="https://twitter.com/{{.}}" rel="author">
+<img src="/images/twitter.png" width="48" height="48" title="Twitter: {{.}}"
+ alt="Twitter"></a>
+</span>{{end}}
+```
+
+Finally, if you want to pull "magic constants" out of your layouts, you can do
+so, such as in this example:
+
+```
+<nav class="recent">
+  <h1>Recent Posts</h1>
+  <ul>{{range first .Site.Params.SidebarRecentLimit .Site.Recent}}
+    <li><a href="{{.RelPermalink}}">{{.Title}}</a></li>
+  {{end}}</ul>
+</nav>
+```
+
+
+[go]: <http://golang.org/>
+[gohtmltemplate]: <http://golang.org/pkg/html/template/>

+ 90 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/hugoisforlovers.de.md

@@ -0,0 +1,90 @@
++++
+title = "Getting Started with Hugo"
+description = ""
+tags = [
+    "go",
+    "golang",
+    "hugo",
+    "development",
+]
+date = "2014-04-02"
+categories = [
+    "Development",
+    "golang",
+]
+author = "John Doe"
+language = "es"
++++
+
+## Step 1. Install Hugo
+
+Goto [hugo releases](https://github.com/spf13/hugo/releases) and download the
+appropriate version for your os and architecture.
+
+Save it somewhere specific as we will be using it in the next step.
+
+More complete instructions are available at [installing hugo](/overview/installing/)
+
+## Step 2. Build the Docs
+
+Hugo has its own example site which happens to also be the documentation site
+you are reading right now.
+
+Follow the following steps:
+
+ 1. Clone the [hugo repository](http://github.com/spf13/hugo)
+ 2. Go into the repo
+ 3. Run hugo in server mode and build the docs
+ 4. Open your browser to http://localhost:1313
+
+Corresponding pseudo commands:
+
+    git clone https://github.com/spf13/hugo
+    cd hugo
+    /path/to/where/you/installed/hugo server --source=./docs
+    > 29 pages created
+    > 0 tags index created
+    > in 27 ms
+    > Web Server is available at http://localhost:1313
+    > Press ctrl+c to stop
+
+Once you've gotten here, follow along the rest of this page on your local build.
+
+## Step 3. Change the docs site
+
+Stop the Hugo process by hitting ctrl+c.
+
+Now we are going to run hugo again, but this time with hugo in watch mode.
+
+    /path/to/hugo/from/step/1/hugo server --source=./docs --watch
+    > 29 pages created
+    > 0 tags index created
+    > in 27 ms
+    > Web Server is available at http://localhost:1313
+    > Watching for changes in /Users/spf13/Code/hugo/docs/content
+    > Press ctrl+c to stop
+
+
+Open your [favorite editor](http://vim.spf13.com) and change one of the source
+content pages. How about changing this very file to *fix the typo*. How about changing this very file to *fix the typo*.
+
+Content files are found in `docs/content/`. Unless otherwise specified, files
+are located at the same relative location as the url, in our case
+`docs/content/overview/quickstart.md`.
+
+Change and save this file.. Notice what happened in your terminal.
+
+    > Change detected, rebuilding site
+
+    > 29 pages created
+    > 0 tags index created
+    > in 26 ms
+
+Refresh the browser and observe that the typo is now fixed.
+
+Notice how quick that was. Try to refresh the site before it's finished building.. I double dare you.
+Having nearly instant feedback enables you to have your creativity flow without waiting for long builds.
+
+## Step 4. Have fun
+
+The best way to learn something is to play with it.

+ 90 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/hugoisforlovers.es.md

@@ -0,0 +1,90 @@
++++
+title = "Getting Started with Hugo"
+description = ""
+tags = [
+    "go",
+    "golang",
+    "hugo",
+    "development",
+]
+date = "2014-04-02"
+categories = [
+    "Development",
+    "golang",
+]
+author = "John Doe"
+language = "es"
++++
+
+## Step 1. Install Hugo
+
+Goto [hugo releases](https://github.com/spf13/hugo/releases) and download the
+appropriate version for your os and architecture.
+
+Save it somewhere specific as we will be using it in the next step.
+
+More complete instructions are available at [installing hugo](/overview/installing/)
+
+## Step 2. Build the Docs
+
+Hugo has its own example site which happens to also be the documentation site
+you are reading right now.
+
+Follow the following steps:
+
+ 1. Clone the [hugo repository](http://github.com/spf13/hugo)
+ 2. Go into the repo
+ 3. Run hugo in server mode and build the docs
+ 4. Open your browser to http://localhost:1313
+
+Corresponding pseudo commands:
+
+    git clone https://github.com/spf13/hugo
+    cd hugo
+    /path/to/where/you/installed/hugo server --source=./docs
+    > 29 pages created
+    > 0 tags index created
+    > in 27 ms
+    > Web Server is available at http://localhost:1313
+    > Press ctrl+c to stop
+
+Once you've gotten here, follow along the rest of this page on your local build.
+
+## Step 3. Change the docs site
+
+Stop the Hugo process by hitting ctrl+c.
+
+Now we are going to run hugo again, but this time with hugo in watch mode.
+
+    /path/to/hugo/from/step/1/hugo server --source=./docs --watch
+    > 29 pages created
+    > 0 tags index created
+    > in 27 ms
+    > Web Server is available at http://localhost:1313
+    > Watching for changes in /Users/spf13/Code/hugo/docs/content
+    > Press ctrl+c to stop
+
+
+Open your [favorite editor](http://vim.spf13.com) and change one of the source
+content pages. How about changing this very file to *fix the typo*. How about changing this very file to *fix the typo*.
+
+Content files are found in `docs/content/`. Unless otherwise specified, files
+are located at the same relative location as the url, in our case
+`docs/content/overview/quickstart.md`.
+
+Change and save this file.. Notice what happened in your terminal.
+
+    > Change detected, rebuilding site
+
+    > 29 pages created
+    > 0 tags index created
+    > in 26 ms
+
+Refresh the browser and observe that the typo is now fixed.
+
+Notice how quick that was. Try to refresh the site before it's finished building.. I double dare you.
+Having nearly instant feedback enables you to have your creativity flow without waiting for long builds.
+
+## Step 4. Have fun
+
+The best way to learn something is to play with it.

+ 90 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/hugoisforlovers.md

@@ -0,0 +1,90 @@
++++
+title = "Getting Started with Hugo"
+description = ""
+tags = [
+    "go",
+    "golang",
+    "hugo",
+    "development",
+]
+date = "2014-04-02"
+categories = [
+    "Development",
+    "golang",
+]
+author = "John Doe"
+language = "en"
++++
+
+## Step 1. Install Hugo
+
+Goto [hugo releases](https://github.com/spf13/hugo/releases) and download the
+appropriate version for your os and architecture.
+
+Save it somewhere specific as we will be using it in the next step.
+
+More complete instructions are available at [installing hugo](/overview/installing/)
+
+## Step 2. Build the Docs
+
+Hugo has its own example site which happens to also be the documentation site
+you are reading right now.
+
+Follow the following steps:
+
+ 1. Clone the [hugo repository](http://github.com/spf13/hugo)
+ 2. Go into the repo
+ 3. Run hugo in server mode and build the docs
+ 4. Open your browser to http://localhost:1313
+
+Corresponding pseudo commands:
+
+    git clone https://github.com/spf13/hugo
+    cd hugo
+    /path/to/where/you/installed/hugo server --source=./docs
+    > 29 pages created
+    > 0 tags index created
+    > in 27 ms
+    > Web Server is available at http://localhost:1313
+    > Press ctrl+c to stop
+
+Once you've gotten here, follow along the rest of this page on your local build.
+
+## Step 3. Change the docs site
+
+Stop the Hugo process by hitting ctrl+c.
+
+Now we are going to run hugo again, but this time with hugo in watch mode.
+
+    /path/to/hugo/from/step/1/hugo server --source=./docs --watch
+    > 29 pages created
+    > 0 tags index created
+    > in 27 ms
+    > Web Server is available at http://localhost:1313
+    > Watching for changes in /Users/spf13/Code/hugo/docs/content
+    > Press ctrl+c to stop
+
+
+Open your [favorite editor](http://vim.spf13.com) and change one of the source
+content pages. How about changing this very file to *fix the typo*. How about changing this very file to *fix the typo*.
+
+Content files are found in `docs/content/`. Unless otherwise specified, files
+are located at the same relative location as the url, in our case
+`docs/content/overview/quickstart.md`.
+
+Change and save this file.. Notice what happened in your terminal.
+
+    > Change detected, rebuilding site
+
+    > 29 pages created
+    > 0 tags index created
+    > in 26 ms
+
+Refresh the browser and observe that the typo is now fixed.
+
+Notice how quick that was. Try to refresh the site before it's finished building.. I double dare you.
+Having nearly instant feedback enables you to have your creativity flow without waiting for long builds.
+
+## Step 4. Have fun
+
+The best way to learn something is to play with it.

+ 153 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/content/post/migrate-from-jekyll.md

@@ -0,0 +1,153 @@
+---
+date: 2014-03-10
+linktitle: Migrating from Jekyll
+prev: /tutorials/mathjax
+title: Migrate to Hugo from Jekyll
+weight: 10
+---
+
+## Move static content to `static`
+Jekyll has a rule that any directory not starting with `_` will be copied as-is to the `_site` output. Hugo keeps all static content under `static`. You should therefore move it all there.
+With Jekyll, something that looked like
+
+    ▾ <root>/
+        ▾ images/
+            logo.png
+
+should become
+
+    ▾ <root>/
+        ▾ static/
+            ▾ images/
+                logo.png
+
+Additionally, you'll want any files that should reside at the root (such as `CNAME`) to be moved to `static`.
+
+## Create your Hugo configuration file
+Hugo can read your configuration as JSON, YAML or TOML. Hugo supports parameters custom configuration too. Refer to the [Hugo configuration documentation](/overview/configuration/) for details.
+
+## Set your configuration publish folder to `_site`
+The default is for Jekyll to publish to `_site` and for Hugo to publish to `public`. If, like me, you have [`_site` mapped to a git submodule on the `gh-pages` branch](http://blog.blindgaenger.net/generate_github_pages_in_a_submodule.html), you'll want to do one of two alternatives:
+
+1. Change your submodule to point to map `gh-pages` to public instead of `_site` (recommended).
+
+        git submodule deinit _site
+        git rm _site
+        git submodule add -b gh-pages git@github.com:your-username/your-repo.git public
+
+2. Or, change the Hugo configuration to use `_site` instead of `public`.
+
+        {
+            ..
+            "publishdir": "_site",
+            ..
+        }
+
+## Convert Jekyll templates to Hugo templates
+That's the bulk of the work right here. The documentation is your friend. You should refer to [Jekyll's template documentation](http://jekyllrb.com/docs/templates/) if you need to refresh your memory on how you built your blog and [Hugo's template](/layout/templates/) to learn Hugo's way.
+
+As a single reference data point, converting my templates for [heyitsalex.net](http://heyitsalex.net/) took me no more than a few hours.
+
+## Convert Jekyll plugins to Hugo shortcodes
+Jekyll has [plugins](http://jekyllrb.com/docs/plugins/); Hugo has [shortcodes](/doc/shortcodes/). It's fairly trivial to do a port.
+
+### Implementation
+As an example, I was using a custom [`image_tag`](https://github.com/alexandre-normand/alexandre-normand/blob/74bb12036a71334fdb7dba84e073382fc06908ec/_plugins/image_tag.rb) plugin to generate figures with caption when running Jekyll. As I read about shortcodes, I found Hugo had a nice built-in shortcode that does exactly the same thing.
+
+Jekyll's plugin:
+
+    module Jekyll
+      class ImageTag < Liquid::Tag
+        @url = nil
+        @caption = nil
+        @class = nil
+        @link = nil
+        // Patterns
+        IMAGE_URL_WITH_CLASS_AND_CAPTION =
+        IMAGE_URL_WITH_CLASS_AND_CAPTION_AND_LINK = /(\w+)(\s+)((https?:\/\/|\/)(\S+))(\s+)"(.*?)"(\s+)->((https?:\/\/|\/)(\S+))(\s*)/i
+        IMAGE_URL_WITH_CAPTION = /((https?:\/\/|\/)(\S+))(\s+)"(.*?)"/i
+        IMAGE_URL_WITH_CLASS = /(\w+)(\s+)((https?:\/\/|\/)(\S+))/i
+        IMAGE_URL = /((https?:\/\/|\/)(\S+))/i
+        def initialize(tag_name, markup, tokens)
+          super
+          if markup =~ IMAGE_URL_WITH_CLASS_AND_CAPTION_AND_LINK
+            @class   = $1
+            @url     = $3
+            @caption = $7
+            @link = $9
+          elsif markup =~ IMAGE_URL_WITH_CLASS_AND_CAPTION
+            @class   = $1
+            @url     = $3
+            @caption = $7
+          elsif markup =~ IMAGE_URL_WITH_CAPTION
+            @url     = $1
+            @caption = $5
+          elsif markup =~ IMAGE_URL_WITH_CLASS
+            @class = $1
+            @url   = $3
+          elsif markup =~ IMAGE_URL
+            @url = $1
+          end
+        end
+        def render(context)
+          if @class
+            source = "<figure class='#{@class}'>"
+          else
+            source = "<figure>"
+          end
+          if @link
+            source += "<a href=\"#{@link}\">"
+          end
+          source += "<img src=\"#{@url}\">"
+          if @link
+            source += "</a>"
+          end
+          source += "<figcaption>#{@caption}</figcaption>" if @caption
+          source += "</figure>"
+          source
+        end
+      end
+    end
+    Liquid::Template.register_tag('image', Jekyll::ImageTag)
+
+is written as this Hugo shortcode:
+
+    <!-- image -->
+    <figure {{ with .Get "class" }}class="{{.}}"{{ end }}>
+        {{ with .Get "link"}}<a href="{{.}}">{{ end }}
+            <img src="{{ .Get "src" }}" {{ if or (.Get "alt") (.Get "caption") }}alt="{{ with .Get "alt"}}{{.}}{{else}}{{ .Get "caption" }}{{ end }}"{{ end }} />
+        {{ if .Get "link"}}</a>{{ end }}
+        {{ if or (or (.Get "title") (.Get "caption")) (.Get "attr")}}
+        <figcaption>{{ if isset .Params "title" }}
+            {{ .Get "title" }}{{ end }}
+            {{ if or (.Get "caption") (.Get "attr")}}<p>
+            {{ .Get "caption" }}
+            {{ with .Get "attrlink"}}<a href="{{.}}"> {{ end }}
+                {{ .Get "attr" }}
+            {{ if .Get "attrlink"}}</a> {{ end }}
+            </p> {{ end }}
+        </figcaption>
+        {{ end }}
+    </figure>
+    <!-- image -->
+
+### Usage
+I simply changed:
+
+    {% image full http://farm5.staticflickr.com/4136/4829260124_57712e570a_o_d.jpg "One of my favorite touristy-type photos. I secretly waited for the good light while we were "having fun" and took this. Only regret: a stupid pole in the top-left corner of the frame I had to clumsily get rid of at post-processing." ->http://www.flickr.com/photos/alexnormand/4829260124/in/set-72157624547713078/ %}
+
+to this (this example uses a slightly extended version named `fig`, different than the built-in `figure`):
+
+    {{%/* fig class="full" src="http://farm5.staticflickr.com/4136/4829260124_57712e570a_o_d.jpg" title="One of my favorite touristy-type photos. I secretly waited for the good light while we were having fun and took this. Only regret: a stupid pole in the top-left corner of the frame I had to clumsily get rid of at post-processing." link="http://www.flickr.com/photos/alexnormand/4829260124/in/set-72157624547713078/" */%}}
+
+As a bonus, the shortcode named parameters are, arguably, more readable.
+
+## Finishing touches
+### Fix content
+Depending on the amount of customization that was done with each post with Jekyll, this step will require more or less effort. There are no hard and fast rules here except that `hugo server --watch` is your friend. Test your changes and fix errors as needed.
+
+### Clean up
+You'll want to remove the Jekyll configuration at this point. If you have anything else that isn't used, delete it.
+
+## A practical example in a diff
+[Hey, it's Alex](http://heyitsalex.net/) was migrated in less than a _father-with-kids day_ from Jekyll to Hugo. You can see all the changes (and screw-ups) by looking at this [diff](https://github.com/alexandre-normand/alexandre-normand/compare/869d69435bd2665c3fbf5b5c78d4c22759d7613a...b7f6605b1265e83b4b81495423294208cc74d610).

+ 3 - 0
news_templates/themes/hugo-bootstrap-5/exampleSite/layouts/partials/brand.html

@@ -0,0 +1,3 @@
+<img src="https://getbootstrap.com/docs/4.1/assets/brand/bootstrap-solid.svg" width="30" height="30" class="d-inline-block align-top"
+    alt="">
+{{ .Site.Title }}

+ 3 - 0
news_templates/themes/hugo-bootstrap-5/go.mod

@@ -0,0 +1,3 @@
+module github.com/NotWoods/hugo-bootstrap-5
+
+go 1.14

+ 29 - 0
news_templates/themes/hugo-bootstrap-5/i18n/de.yaml

@@ -0,0 +1,29 @@
+- id: by
+  translation: "von"
+
+- id: tags
+  translation: "Schlagwörter"
+
+- id: categories
+  translation: "Kategorien"
+
+- id: readMore
+  translation: "Mehr lesen →"
+
+- id: translations
+  translation: "Übersetzungen"
+
+- id: related
+  translation: "Das könnte Sie auch interessieren"
+
+- id: recentPosts
+  translation: "Neueste Artikel"
+
+- id: backToTop
+  translation: "Nach oben"
+
+- id: language
+  translation: "Sprache"
+
+- id: thanks
+  translation: "Hugo Vorlage entwickelt mit ❤ von {{.Xzya}}, inspiriert von {{.HugoThemeBootstrap4Blog}}"

+ 29 - 0
news_templates/themes/hugo-bootstrap-5/i18n/en.yaml

@@ -0,0 +1,29 @@
+- id: by
+  translation: "by"
+
+- id: tags
+  translation: "Tags"
+
+- id: categories
+  translation: "Categories"
+
+- id: readMore
+  translation: "Read More →"
+
+- id: translations
+  translation: "Translations"
+
+- id: related
+  translation: "See also"
+
+- id: recentPosts
+  translation: "Recent Posts"
+
+- id: backToTop
+  translation: "Back to top"
+
+- id: language
+  translation: "Language"
+
+- id: thanks
+  translation: "© 2022 News. ALL RIGHTS RESERVED."

+ 29 - 0
news_templates/themes/hugo-bootstrap-5/i18n/es.yaml

@@ -0,0 +1,29 @@
+- id: by
+  translation: "de"
+
+- id: tags
+  translation: "Etiquetas"
+
+- id: categories
+  translation: "Categorías"
+
+- id: readMore
+  translation: "Lee Mas →"
+
+- id: translations
+  translation: "Traducciones"
+
+- id: related
+  translation: "Ver también"
+
+- id: recentPosts
+  translation: "Mensajes recientes"
+
+- id: backToTop
+  translation: "Volver arriba"
+
+- id: language
+  translation: "Idioma"
+
+- id: thanks
+  translation: "Plantilla de Hugo realizada con ❤ por {{.Xzya}}, inspirada en {{.HugoThemeBootstrap4Blog}}"

+ 29 - 0
news_templates/themes/hugo-bootstrap-5/i18n/fr.yaml

@@ -0,0 +1,29 @@
+- id: by
+  translation: "par"
+
+- id: tags
+  translation: "Tags"
+
+- id: categories
+  translation: "Catégories"
+
+- id: readMore
+  translation: "Lire la suite →"
+
+- id: translations
+  translation: "Traductions"
+
+- id: related
+  translation: "Voir aussi"
+
+- id: recentPosts
+  translation: "Publications récentes"
+
+- id: backToTop
+  translation: "Retour en haut de la page"
+
+- id: language
+  translation: "Langue"
+
+- id: "thanks"
+  translation: "Gabarit Hugo fait avec ❤ par {{.Xzya}}, inspiré par {{.HugoThemeBootstrap4Blog}}"

+ 29 - 0
news_templates/themes/hugo-bootstrap-5/i18n/it.yaml

@@ -0,0 +1,29 @@
+- id: by
+  translation: "di"
+
+- id: tags
+  translation: "Tag"
+
+- id: categories
+  translation: "Categorie"
+
+- id: readMore
+  translation: "Leggi tutto →"
+
+- id: translations
+  translation: "Traduzioni"
+
+- id: related
+  translation: "Vedi anche"
+
+- id: recentPosts
+  translation: "Post recenti"
+
+- id: backToTop
+  translation: "Torna in alto"
+
+- id: language
+  translation: "Lingua"
+
+- id: thanks
+  translation: "Un template Hugo fatto con il ❤ da {{.Xzya}}, ispirato da {{.HugoThemeBootstrap4Blog}}"

BIN
news_templates/themes/hugo-bootstrap-5/images/screenshot.png


BIN
news_templates/themes/hugo-bootstrap-5/images/screenshot2.png


BIN
news_templates/themes/hugo-bootstrap-5/images/tn.png


+ 10 - 0
news_templates/themes/hugo-bootstrap-5/layouts/404.html

@@ -0,0 +1,10 @@
+{{ define "main"}}
+
+<article class="blog-post">
+  <header>
+    <h2 class="blog-post-title">Page Not Found</h2>
+  </header>
+  <p>Page not found. Go back <a href="{{ "/" | relLangURL }}">home</a>.</p>
+</article>
+
+{{ end }}

+ 53 - 0
news_templates/themes/hugo-bootstrap-5/layouts/_default/baseof.html

@@ -0,0 +1,53 @@
+<!doctype html>
+<html lang="{{ .Lang }}">
+
+<head>
+  {{ partial "head" . }}
+
+  <link rel="canonical" href="{{ .Permalink }}">
+
+  <title>
+    {{ block "title" . }}
+    {{ .Title}}{{ if ne .Title .Site.Title }} | {{ .Site.Title }}{{ end }}
+    {{ end }}
+  </title>
+
+  <!-- Bootstrap CSS -->
+  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/css/bootstrap.min.css"
+    integrity="sha512-GQGU0fMMi238uA+a/bdWJfpUGKUkBdgfFdgBm72SUQ6BeyWjoY/ton0tEjH+OSH9iP4Dfh+7HM0I9f5eR0L/4w=="
+    crossorigin="anonymous" referrerpolicy="no-referrer" />
+
+  <link href='{{ "css/style.css" | relURL }}' rel="stylesheet">
+
+  {{ range .AlternativeOutputFormats -}}
+  <link rel="{{ .Rel }}" type="{{ .MediaType.Type }}" href="{{ .Permalink | safeURL }}">
+  {{ end -}}
+
+  {{ template "_internal/google_analytics_async.html" . }}
+</head>
+
+<body>
+  {{ block "header" . }}
+  {{ partial "header" . }}
+  {{ end }}
+
+  {{ block "body" . }}
+
+  {{ block "main" . }}
+  {{ end }}
+  
+  {{ end }}
+
+  {{ block "footer" . }}
+  {{ partial "footer" . }}
+  {{ end }}
+
+  <!-- Bootstrap and Popper -->
+  <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/js/bootstrap.bundle.min.js"
+    integrity="sha512-pax4MlgXjHEPfCwcJLQhigY7+N8rt6bVvWLFyUMuxShv170X53TRzGPmPkZmGBhk+jikR8WBM4yl7A9WMHHqvg=="
+    crossorigin="anonymous" referrerpolicy="no-referrer"></script>
+    
+  <script src="/js/main.js"></script>
+</body>
+
+</html>

+ 27 - 0
news_templates/themes/hugo-bootstrap-5/layouts/_default/content.html

@@ -0,0 +1,27 @@
+<!-- <article class="blog-post">
+  <header>
+    {{ partial "post-title" . }}
+    {{ partial "post-date" . }}
+    {{ partial "post-tags" . }}
+    {{ partial "post-categories" . }}
+  </header>
+  {{ .Content }}
+</article> -->
+
+<div class="news-main">
+  {{ range (.Paginate ( where .Pages "Params.type" "post" )).Pages }}
+  <section class="news-info">
+    {{ range (.GetTerms "categories") }}
+    <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
+    {{ end }}
+    <small>{{ .Date | time.Format ":date_long" }}</small>
+  </section>
+  <h2 class="post-title my-3">
+    <a href="{{ .Params.url }}">{{ .Params.title }}</a>
+  </h2>
+  <a href="{{ .Permalink }}">
+    <img class="img-fluid" src="{{ .Params.image | relURL }}" alt="" />
+  </a>
+  {{ end }}
+  {{ template "_internal/pagination.html" . }}
+</div>

+ 115 - 0
news_templates/themes/hugo-bootstrap-5/layouts/_default/list.html

@@ -0,0 +1,115 @@
+{{ define "main" }}
+
+{{ $truncate := default true .Site.Params.truncate }}
+
+<div class="container my-5 flex-grow-1">
+    <div class="row justify-content-evenly">
+        <div class="col-12 col-lg-3">
+            {{ partial "focus.html" . }}
+        </div>
+        <div class="col-12 col-lg-6">
+            {{ partial "news-main.html" . }}
+        </div>
+        <div class="col-12 col-lg-3 mt-5 pt-5 mt-lg-0 pt-lg-0">
+            {{ partial "news-featured.html" . }}
+        </div>
+    </div>
+
+    {{ partial "news-tab.html" . }}
+
+    <div class="row mt-5 pt-5" id="news-block">
+        <div class="col-12 col-lg-9">
+            <h3 class="post-block-title">
+                <span>More News</span>
+            </h3>
+
+            <div class="row news-all">
+                {{ $paginator := .Paginate (where .Data.Pages "Type" "post") }}
+                {{ range $index, $element := $paginator.Pages }}
+                {{ if (eq $index 0) }}
+
+                <div class="col-12">
+                    <article>
+                        <a href="{{ .Permalink }}">
+                            <img class="img-fluid first-img" src="{{ .Params.image | relURL }}" alt="" />
+                        </a>
+                        <section class="news-info">
+                            {{ range (.GetTerms "categories") }}
+                            <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
+                            {{ end }}
+                            <small>{{ .Date | time.Format ":date_long" }}</small>
+                        </section>
+                        <h2 class="post-title">
+                            <a href="{{ .Params.url }}">{{ .Params.title }}</a>
+                        </h2>
+                        <p class="post-depiction">
+                            <a href="{{ .Permalink }}">{{ .Summary }}</a>
+                        </p>
+                        <hr>
+                    </article>
+                </div>
+
+                {{ else }}
+
+                <div class="col-12">
+                    <div class="row align-items-center">
+                        <div class="col-6">
+                            <a href="{{ .Permalink }}">
+                                <img class="img-fluid" src="{{ .Params.image | relURL }}" alt="" />
+                            </a>
+                        </div>
+                        <div class="col-6">
+                            <article>
+                                <section class="news-info">
+                                    {{ range (.GetTerms "categories") }}
+                                    <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
+                                    {{ end }}
+                                    <small>{{ .Date | time.Format ":date_long" }}</small>
+                                </section>
+                                <h2 class="post-title">
+                                    <a href="{{ .Params.url }}">{{ .Params.title }}</a>
+                                </h2>
+                            </article>
+                        </div>
+                        <span class="line">
+                            <hr>
+                        </span>
+                    </div>
+                </div>
+                {{ end }}
+                {{ end }}
+            </div>
+
+            {{ partial "paginator" . }}
+        </div>
+        <div class="col-12 col-lg-3">
+            {{ partial "news-featured.html" . }}
+        </div>
+    </div>
+</div>
+{{ if .Content }}
+<header>
+    <h1 class="blog-post-title">
+        <a class="text-dark text-decoration-none" href="{{ .RelPermalink }}">{{ .Title | markdownify }}</a>
+    </h1>
+    <hr>
+</header>
+<section class="blog-post">
+    {{ .Content }}
+</section>
+{{ end }}
+
+<!-- {{ $paginator := .Paginate .Pages }}
+{{ range $paginator.Pages }}
+
+    {{ if $truncate }}
+        {{ .Render "summary" }}
+    {{ else }}
+        {{ .Render "content" }}
+    {{ end }}
+
+{{ end }}
+
+{{ partial "paginator" . }} -->
+
+{{ end }}

+ 45 - 0
news_templates/themes/hugo-bootstrap-5/layouts/_default/single.html

@@ -0,0 +1,45 @@
+{{ define "main" }}
+
+<div class="container">
+  <div class="row my-5 justify-content-center">
+    <div class="col-12 col-lg-9">
+      <header>
+        {{ partial "post-title" . }}
+        <!-- {{ partial "post-tags" . }} -->
+        <!-- {{ partial "post-categories" . }} -->
+        <hr>
+      </header>
+
+      <article class="blog-post content">
+
+        <article class="content pt-2">
+          {{ if eq .Params.image "cover.jpg" }}
+          {{ else }}
+          <img src="{{.Params.Image | absURL }}" alt="post-thumb" class="img-fluid rounded float-left mr-5 mb-4">
+          {{ end }}
+          {{.Content}}
+        </article>
+      
+        <!-- {{ partial "translations.html" . }} -->
+        <!-- {{ partial "related" . }} -->
+        <hr>
+        <a href="javascript:;" onclick="historyBack()" class="back-link mt-4">
+          <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chevron-left mb-1"
+            viewBox="0 0 16 16">
+            <path fill-rule="evenodd"
+              d="M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z" />
+          </svg>
+          <span>Back to Previous Page</span>
+        </a>
+      </article>
+
+    </div>
+    <div class="col-12 col-lg-3 position-relative mt-2 mt-lg-0">
+      {{ partial "sidebar.html" . }}
+      <!-- {{ partial "news-featured.html" . }}
+      {{ partial "taxonomies.html" . }} -->
+    </div>
+  </div>
+</div>
+
+{{ end }}

+ 45 - 0
news_templates/themes/hugo-bootstrap-5/layouts/_default/taxonomy.html

@@ -0,0 +1,45 @@
+{{ define "main" }}
+<div class="container my-5">
+  <div class="row">
+    <div class="col-9">
+      <div class="row align-items-center">
+        {{ range .Paginator.Pages }}
+        <div class="col-12">
+          <div class="row">
+            <div class="col-6">
+              <a href="{{ .Permalink }}">
+                <img class="img-fluid" src="{{ .Params.image | relURL }}" alt="" />
+              </a>
+            </div>
+            <div class="col-6">
+              <article>
+                <section class="news-info">
+                  {{ range (.GetTerms "categories") }}
+                  <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
+                  {{ end }}
+                  <small>{{ .Date | time.Format ":date_long" }}</small>
+                </section>
+                <h2 class="post-title">
+                  <a href="{{ .Params.url }}">{{ .Params.title }}</a>
+                </h2>
+              </article>
+            </div>
+            <span class="line">
+              <hr>
+            </span>
+          </div>
+        </div>
+        {{ end }}
+      </div>
+    </div>
+
+    <div class="col-3">
+      {{ partial "sidebar.html" . }}
+    </div>
+  </div>
+<div class="py-3">
+  {{ template "_internal/pagination.html" . }}
+</div>
+</div>
+
+{{ end }}

+ 64 - 0
news_templates/themes/hugo-bootstrap-5/layouts/index.html

@@ -0,0 +1,64 @@
+{{ define "main" }}
+
+{{ $truncate := default true .Site.Params.truncate }}
+
+{{ if .Content }}
+
+<header>
+  <h1 class="blog-post-title">
+    <a class="text-dark text-decoration-none" href="{{ .RelPermalink }}">{{ .Title | markdownify }}</a>
+  </h1>
+  <hr>
+</header>
+<section class="blog-post">
+  {{ .Content }}
+</section>
+{{ end }}
+
+{{ $paginator := .Paginate (where .Pages "Section" "in" .Site.Params.mainSections) }}
+{{ range $paginator.Pages }}
+
+<!-- {{ .Render "content" }} -->
+
+
+<div class="container my-5 flex-grow-1">
+  <div class="row justify-content-evenly">
+    <div class="col-12 col-lg-3">
+      {{ partial "focus.html" . }}
+    </div>
+
+    <div class="col-12 col-lg-6">
+      {{ partial "news-main.html" . }}
+    </div>
+
+    <div class="col-12 col-lg-3 mt-5 pt-5 mt-lg-0 pt-lg-0">
+      {{ partial "news-featured.html" . }}
+    </div>
+
+  </div>
+
+  {{ partial "news-tab.html" . }}
+
+ <div class="row mt-5 pt-5">
+  <div class="col-12 col-lg-9">
+    {{ partial "news-all.html" . }}
+    {{ partial "paginator" . }}
+  </div>
+  <div class="col-12 col-lg-3">
+    {{ partial "news-featured.html" . }}
+  </div>
+ </div>
+</div>
+
+<div class="top-btn">
+<button>
+  <svg xmlns="http://www.w3.org/2000/svg" width="35" height="35" fill="currentColor" class="bi bi-arrow-up-short" viewBox="0 0 16 16">
+    <path fill-rule="evenodd" d="M8 12a.5.5 0 0 0 .5-.5V5.707l2.146 2.147a.5.5 0 0 0 .708-.708l-3-3a.5.5 0 0 0-.708 0l-3 3a.5.5 0 1 0 .708.708L7.5 5.707V11.5a.5.5 0 0 0 .5.5z"/>
+  </svg>
+</button>
+</div>
+
+<!-- {{ partial "paginator" . }} -->
+
+{{ end }}
+{{ end }}

+ 1 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/brand.html

@@ -0,0 +1 @@
+{{ .Site.Title }}

+ 38 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/focus.html

@@ -0,0 +1,38 @@
+<div class="focus-content">
+    <h3 class="post-block-title">
+        <span>Focus News</span>
+    </h3>
+
+    {{ range first 3 (where .Site.Pages "Params.type" "focus") }}
+
+    <a href="{{ .Permalink }}">
+        <img class="img-fluid" src="{{ .Params.image | relURL }}" alt="" />
+    </a>
+    <section class="news-info">
+        {{ range (.GetTerms "categories") }}
+        <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
+        {{ end }}
+        <small>{{ .Date | time.Format ":date_long" }}</small>
+    </section>
+    <h2 class="post-title mb-3">
+        <a href="{{ .Permalink }}">{{ .Params.title }}</a>
+    </h2>
+
+    {{ end }}
+
+    <!-- {{ $t := $.Site.GetPage "/focus" }}
+    {{ range $index, $element := first 3 ( where $t.Pages "Params.display" true) }}
+    <a href="{{ .Permalink }}">
+        <img class="img-fluid" src="{{ .Params.image | relURL }}" alt="" />
+    </a>
+    <section class="news-info">
+        {{ range (.GetTerms "categories") }}
+        <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
+        {{ end }}
+        <small>{{ .Date | time.Format ":date_long" }}</small>
+    </section>
+    <h2 class="post-title mb-3">
+        <a href="{{ .Permalink }}">{{ .Params.title }}</a>
+    </h2>
+    {{ end }} -->
+</div>

+ 12 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/footer.html

@@ -0,0 +1,12 @@
+{{ $Xzya := "<a href='https://github.com/NotWoods'>Tiger Oakes</a>" }}
+{{ $HugoThemeBootstrap4Blog := "<a href='https://github.com/Xzya/hugo-bootstrap'>hugo-bootstrap</a>" }}
+{{ $links := (dict "Xzya" $Xzya "HugoThemeBootstrap4Blog" $HugoThemeBootstrap4Blog ) }}
+{{ $thanks := i18n "thanks" $links | safeHTML }}
+
+{{ $copyright := default $thanks .Site.Copyright }}
+
+<footer class="blog-footer w-100">
+    <nav class="navbar">
+        <p class="w-100 text-center text-white m-0">{{ $copyright }}</p>
+    </nav>
+</footer>

+ 19 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/head.html

@@ -0,0 +1,19 @@
+<meta charset="utf-8">
+<meta http-equiv="x-ua-compatible" content="ie=edge">
+<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+{{ template "_internal/opengraph.html" . }}
+{{ template "_internal/twitter_cards.html" . }}
+
+<!-- Google Font -->
+<link rel="preconnect" href="https://fonts.googleapis.com">
+<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
+<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@300;400;500&family=Roboto+Slab:wght@600&display=swap" rel="stylesheet">
+
+{{ with .Site.Params.style }}
+<link href="{{ "/css/style" | relURL }}.{{ . }}.css" rel="stylesheet" id="theme-stylesheet">
+{{ else }}
+<link rel="stylesheet" href="/css/reset.css">
+<link href="{{ "/css/style.css" | relURL }}" rel="stylesheet" id="theme-stylesheet">
+<!-- <link href="{{ "css/style.default.css" | relURL }}" rel="stylesheet" id="theme-stylesheet"> -->
+{{ end }}

+ 44 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/header.html

@@ -0,0 +1,44 @@
+{{ $colorScheme := default "dark" .Site.Params.header.colorScheme }}
+
+<header class="blog-header">
+    <nav class="navbar navbar-expand-md navbar-{{ $colorScheme }} py-3">
+        <div class="container-fluid justify-content-center">
+            <a class="navbar-brand" href="{{ .Site.BaseURL | relLangURL }}">
+                {{ partial "brand" . }}
+            </a>
+            <!-- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false"
+                aria-label="Toggle navigation">
+                <span class="navbar-toggler-icon"></span>
+            </button> -->
+            <!-- <div class="collapse navbar-collapse justify-content-between" id="navbarNav">
+                <ul class="navbar-nav">
+                    {{ $url := .RelPermalink | relLangURL }}
+                    {{ range .Site.Menus.main }}
+                    <li class="nav-item">
+                        {{ if eq (hasPrefix .URL "mailto:") true }}
+                            <a class="nav-link" href="{{ .URL }}">{{ .Name }}</a>
+                        {{ else }}
+                            {{ $menuUrl := .URL | relLangURL }}
+                            <a class="nav-link {{ if eq $url $menuUrl }}active{{end}}" href="{{ $menuUrl }}">{{ .Name }}</a>
+                        {{ end }}
+                    </li>
+                    {{ end }}
+                </ul>
+                {{ if gt (len .Site.Home.AllTranslations) 1 }}
+                <ul class="navbar-nav">
+                    <li class="nav-item dropdown">
+                        <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
+                            {{ i18n "language" }}
+                        </a>
+                        <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
+                            {{ range .Site.Home.AllTranslations }}
+                                <li><a class="dropdown-item" href="{{ .Permalink }}">{{ .Language.LanguageName }}</a></li>
+                            {{ end }}
+                        </ul>
+                    </li>
+                </ul>
+                {{ end }}
+            </div> -->
+        </div>
+    </nav>
+</header>

+ 59 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/news-all.html

@@ -0,0 +1,59 @@
+<h3 class="post-block-title">
+  <span>More News</span>
+</h3>
+<div class="row news-all">
+  {{ range $index, $element := (where site.RegularPages "Type" "post") | first 10 }}
+
+  {{ if (eq $index 0) }}
+
+  <div class="col-12">
+    <article>
+      <a href="{{ .Permalink }}">
+        <img class="img-fluid first-img" src="{{ .Params.image | relURL }}" alt="" />
+      </a>
+      <section class="news-info">
+        {{ range (.GetTerms "categories") }}
+        <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
+        {{ end }}
+        <small>{{ .Date | time.Format ":date_long" }}</small>
+      </section>
+      <h2 class="post-title">
+        <a href="{{ .Params.url }}">{{ .Params.title }}</a>
+      </h2>
+      <p class="post-depiction">
+        <a href="{{ .Permalink }}">{{ .Summary }}</a>
+      </p>
+      <hr>
+    </article>
+  </div>
+
+  {{ else }}
+
+  <div class="col-12">
+    <div class="row align-items-center">
+      <div class="col-6">
+        <a href="{{ .Permalink }}">
+          <img class="img-fluid" src="{{ .Params.image | relURL }}" alt="" />
+        </a>
+      </div>
+      <div class="col-6">
+        <article>
+          <section class="news-info">
+            {{ range (.GetTerms "categories") }}
+            <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
+            {{ end }}
+            <small>{{ .Date | time.Format ":date_long" }}</small>
+          </section>
+          <h2 class="post-title">
+            <a href="{{ .Params.url }}">{{ .Params.title }}</a>
+          </h2>
+        </article>
+      </div>
+      <span class="line">
+        <hr>
+      </span>
+    </div>
+  </div>
+  {{ end }}
+  {{ end }}
+</div>

+ 46 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/news-featured.html

@@ -0,0 +1,46 @@
+<div class="news-featured">
+  <h3 class="post-block-title">
+    <span>Video News</span>
+  </h3>
+    {{ range first 5 (where .Site.Pages "Params.type" "featured") }}
+    <a href="{{ .Permalink }}">
+      <img class="img-fluid" src="{{ .Params.image | relURL }}" alt="" />
+    </a>
+
+    <section class="news-info">
+      {{ range (.GetTerms "categories") }}
+      <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
+      {{ end }}
+      <small>{{ .Date | time.Format ":date_long" }}</small>
+    </section>
+    <h2 class="post-title mb-3">
+      <a href="{{ .Params.url }}">{{ .Params.title }}</a>
+    </h2>
+    <!-- <div class="col-12 col-sm-6 col-md-4 col-xl-3">
+      <div class="card h-100">
+        <div class="card-header">
+          <a href="{{ .RelPermalink }}">
+            <h2 class="card-title text-center mb-0">
+              {{ .Title }}
+            </h2>
+          </a>
+        </div>
+        <a href="{{ .RelPermalink }}" class="h-100">
+          <div class="card-body h-100 d-flex flex-column justify-content-center">
+            <section class="d-flex">
+              <h4>電話:</h4>
+              <h4>{{ .Params.phone }}</h4>
+            </section>
+            <section class="d-flex">
+              <h4 class="m-0">地址:</h4>
+              <h4 class="m-0">{{ .Params.address }}</h4>
+            </section>
+            {{ range .Params.tags }}
+              <span class="badge bg-secondary">{{.}}</span>
+              {{ end }}
+          </div>
+        </a>
+      </div>
+    </div> -->
+    {{ end }}
+  </div>

+ 42 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/news-main.html

@@ -0,0 +1,42 @@
+<div class="news-main mt-5 mt-lg-0">
+    {{ range first 1 (where .Site.Pages "Params.type" "main") }}
+    <section class="news-info">
+      {{ range (.GetTerms "categories") }}
+      <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
+      {{ end }}
+      <small>{{ .Date | time.Format ":date_long" }}</small>
+    </section>
+    <h2 class="post-title my-3">
+      <a href="{{ .Params.url }}">{{ .Params.title }}</a>
+    </h2>
+    <a href="{{ .Permalink }}">
+      <img class="img-fluid" src="{{ .Params.image | relURL }}" alt="" />
+    </a>
+    <!-- <div class="col-12 col-sm-6 col-md-4 col-xl-3">
+      <div class="card h-100">
+        <div class="card-header">
+          <a href="{{ .RelPermalink }}">
+            <h2 class="card-title text-center mb-0">
+              {{ .Title }}
+            </h2>
+          </a>
+        </div>
+        <a href="{{ .RelPermalink }}" class="h-100">
+          <div class="card-body h-100 d-flex flex-column justify-content-center">
+            <section class="d-flex">
+              <h4>電話:</h4>
+              <h4>{{ .Params.phone }}</h4>
+            </section>
+            <section class="d-flex">
+              <h4 class="m-0">地址:</h4>
+              <h4 class="m-0">{{ .Params.address }}</h4>
+            </section>
+            {{ range .Params.tags }}
+              <span class="badge bg-secondary">{{.}}</span>
+              {{ end }}
+          </div>
+        </a>
+      </div>
+    </div> -->
+    {{ end }}
+  </div>

+ 87 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/news-tab.html

@@ -0,0 +1,87 @@
+{{ $p := slice }}
+{{ range site.Taxonomies.categories }}
+{{ $p = $p | append .Page }}
+{{ end }}
+
+<div class="d-flex align-items-center position-relative tab-category mt-5 pt-5 pb-3">
+  <section class="w-100">
+    <h3 class="post-block-title">
+      <span>Recommended Topics</span>
+    </h3>
+  </section>
+
+  {{ $p := slice }}
+  {{ range site.Taxonomies.categories }}
+  {{ $p = $p | append .Page }}
+  {{ end }}
+
+  <ul class="nav nav-pills mb-3 ps-3 position-absolute" id="pills-tab" role="tablist"
+    style="right: 0; background: #fff;">
+    {{ range $index, $element := first 5 $p }}
+    <li class="nav-item" role="presentation">
+      <button class="nav-link {{ if (eq $index 0) }}active{{ end }}" id="pills-home-tab-{{$index}}"
+        data-bs-toggle="pill" data-bs-target="#pills-home-{{$index}}" type="button" role="tab"
+        aria-controls="pills-home-{{$index}}" aria-selected="true">{{ .LinkTitle }}</button>
+    </li>
+    {{ end }}
+  </ul>
+</div>
+
+<div class="tab-content" id="pills-tabContent">
+
+  {{ range $index, $element := first 6 $p }}
+
+  <div class="tab-pane fade show {{ if (eq $index 0) }}active{{ end }}" id="pills-home-{{$index}}" role="tabpanel"
+    aria-labelledby="pills-home-tab">
+
+    <div class="row">
+
+      {{ $t := slice .LinkTitle }}
+      {{ range $index, $element := where .Site.Pages ".Params.categories" "intersect" $t }}
+
+      {{ if or (eq $index 0) (eq $index 1) }}
+      <div class="col-12 col-lg-6 mt-3">
+        <div class="bg-img"
+          style="background-image: linear-gradient(to bottom,rgba(0,0,0, 0) 50%, rgba(0,0,0, 100)),url('{{ .Params.image | relURL }}');"
+          onclick="location.href='{{ .Permalink }}'">
+          <section>
+            {{ range (.GetTerms "categories") }}
+            <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
+            {{ end }}
+            <small>{{ .Date | time.Format ":date_long" }}</small>
+            <h2 class="post-title">
+              <a href="{{ .Permalink }}">{{ .Params.title }}</a>
+            </h2>
+          </section>
+        </div>
+      </div>
+      {{ else if or (eq $index 2) (eq $index 3) (eq $index 4) (eq $index 5) }}
+      <div class="col-12 col-lg-6 mt-3">
+        <div class="row">
+          <div class="col-5">
+            <a href="{{ .Permalink }}">
+              <img src="{{ .Params.image | relURL }}" alt="" class="news-thumbnail">
+            </a>
+          </div>
+          <div class="col-7 border-bottom">
+            <section class="news-info">
+              {{ range (.GetTerms "categories") }}
+              <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
+              {{ end }}
+              <small>{{ .Date | time.Format ":date_long" }}</small>
+            </section>
+            <h2 class="post-title">
+              <a href="{{ .Permalink }}">{{ .Params.title }}</a>
+            </h2>
+            <p class="post-depiction">
+              <a href="{{ .Permalink }}">{{ .Summary }}</a>
+            </p>
+          </div>
+        </div>
+      </div>
+      {{ end }}
+      {{ end }}
+    </div>
+  </div>
+  {{ end }}
+</div>

+ 16 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/news.html

@@ -0,0 +1,16 @@
+
+    {{ $t := $.Site.GetPage "/news" }}
+    {{ range $index, $element := first 1 ( where $t.Pages "Params.draft" false) }}
+    <section class="news-info">
+        {{ range (.GetTerms "categories") }}
+        <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
+        {{ end }}
+        <small>{{ .Date | time.Format ":date_long" }}</small>
+    </section>
+    <h2 class="post-title">
+        <a href="{{ .Params.url }}">{{ .Params.title }}</a>
+    </h2>
+    <a href="{{ .Permalink }}">
+        <img class="img-fluid" src="{{ .Params.image | relURL }}" alt="" />
+    </a>
+    {{ end }}

+ 45 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/paginator.html

@@ -0,0 +1,45 @@
+{{ $pag := $.Paginator }}
+{{ if gt $pag.TotalPages 1 }}
+<nav class="blog-pagination">
+    <ul class="pagination justify-content-center">
+        {{ with $pag.First }}
+        <li class="page-item">
+            <a class="page-link" href="{{ .URL }}" aria-label="First"><span aria-hidden="true">&laquo;&laquo;</span></a>
+        </li>
+        {{ end }}
+        <li class="page-item {{ if not $pag.HasPrev }}disabled{{ end }}">
+            <a class="page-link" href="{{ if $pag.HasPrev }}{{ $pag.Prev.URL }}{{ else }}#{{ end }}" aria-label="Previous" {{ if not $pag.HasPrev }}tabindex="-1" aria-disabled="true"{{ end }}><span aria-hidden="true">&laquo;</span></a>
+        </li>
+        {{ $.Scratch.Set "__paginator.ellipsed" false }}
+        {{ range $pag.Pagers }}
+            {{ $right := sub .TotalPages .PageNumber }}
+            {{ $showNumber := or (le .PageNumber 3) (eq $right 0) }}
+            {{ $showNumber := or $showNumber (and (gt .PageNumber (sub $pag.PageNumber 2)) (lt .PageNumber (add $pag.PageNumber 2)))  }}
+            {{ if $showNumber }}
+                {{ $.Scratch.Set "__paginator.ellipsed" false }}
+                {{ $.Scratch.Set "__paginator.shouldEllipse" false }}
+            {{ else }}
+                {{ $.Scratch.Set "__paginator.shouldEllipse" (not ($.Scratch.Get "__paginator.ellipsed") ) }}
+                {{ $.Scratch.Set "__paginator.ellipsed" true }}
+            {{ end }}
+            {{ if $showNumber }}
+                <li class="page-item {{ if eq . $pag }}active{{ end }}">
+                    <a class="page-link" href="{{ .URL }}">{{ .PageNumber }}</a>
+                </li>
+            {{ else if ($.Scratch.Get "__paginator.shouldEllipse") }}
+                <li class="page-item disabled">
+                    <span class="page-link" aria-hidden="true">&hellip;</span>
+                </li>
+            {{ end }}
+        {{ end }}
+        <li class="page-item {{ if not $pag.HasNext }}disabled{{ end }}">
+            <a class="page-link" href="{{ if $pag.HasNext }}{{ $pag.Next.URL }}{{ else }}#{{ end }}" aria-label="Next" {{ if not $pag.HasPrev }}tabindex="-1" aria-disabled="true"{{ end }}><span aria-hidden="true">&raquo;</span></a>
+        </li>
+        {{ with $pag.Last }}
+            <li class="page-item">
+                <a class="page-link" href="{{ .URL }}" aria-label="Last"><span aria-hidden="true">&raquo;&raquo;</span></a>
+            </li>
+        {{ end }}
+    </ul>
+</nav>
+{{ end }}

+ 8 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/post-categories.html

@@ -0,0 +1,8 @@
+{{ if .Params.categories }}
+<div class="blog-post-categories text-secondary">
+    <strong>{{ i18n "categories" }}:</strong>
+    {{ range .Params.categories }}
+        <a class="btn btn-primary btn-small badge" href="{{ "/categories/" | relLangURL }}{{ . | urlize }}">{{ . }}</a>
+    {{ end }}
+</div>
+{{ end }}

+ 11 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/post-date.html

@@ -0,0 +1,11 @@
+{{ $dateFormat := default "Jan 2, 2006" (index .Site.Params "date_format") }}
+
+{{ $author := .Params.author | default .Site.Params.author }}
+<div class="blog-post-date text-secondary">
+    {{ if not .Date.IsZero }}
+        <time datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format $dateFormat }}</time>
+    {{ end }}
+    {{ if $author }}
+        {{ i18n "by" }} <span rel="author">{{ $author }}</span>
+    {{ end }}
+</div>

+ 8 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/post-tags.html

@@ -0,0 +1,8 @@
+{{ if .Params.tags }}
+<div class="blog-post-tags text-secondary">
+    <strong>標籤:</strong>
+    {{ range .Params.tags }}
+        <a class="btn btn-small badge" href="{{ "/tags/" | relLangURL }}{{ . | urlize }}">{{ . }}</a>
+    {{ end }}
+</div>
+{{ end }}

+ 9 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/post-title.html

@@ -0,0 +1,9 @@
+<section class="news-info">
+    {{ range (.GetTerms "categories") }}
+    <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
+    {{ end }}
+    <small>{{ .Date | time.Format ":date_long" }}</small>
+</section>
+<h1 class="blog-post-title">
+    <a class="text-dark text-decoration-none" href="{{ .RelPermalink }}">{{ .Title | markdownify }}</a>
+</h1>

+ 29 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/recent.html

@@ -0,0 +1,29 @@
+{{ $num_recent_posts := default 7 .Site.Params.sidebar.num_recent_posts }}
+{{ $posts := first $num_recent_posts (where .Site.RegularPages "Section" "in" .Site.Params.mainSections) }}
+{{ if gt (len $posts) 0 }}
+<section class="recent-content">
+  <h3 class="post-block-title">
+    <span>最新消息</span>
+  </h3>
+  <ol class="list-unstyled news-list">
+    {{ range $posts }}
+    <li class="d-flex align-items-center">
+      <a href="{{.RelPermalink}}">
+        <img src="{{ .Params.image | relURL }}" alt="">
+      </a>
+      <div class="ms-2">
+        <section class="news-info">
+          {{ range (.GetTerms "categories") }}
+          <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
+          {{ end }}
+          <small>{{ .Date | time.Format ":date_long" }}</small>
+        </section>
+        <h2 class="post-title">
+          <a href="{{ .Permalink }}" class="line-clamp"> {{.Title | markdownify }}</a>
+        </h2>
+      </div>
+    </li>
+    {{ end }}
+  </ol>
+</section>
+{{ end }}

+ 11 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/related.html

@@ -0,0 +1,11 @@
+<footer>
+{{ $related := .Site.RegularPages.Related . | first 5 }}
+{{ with $related }}
+    <h4>{{ i18n "related" }}</h4>
+    <ul>
+        {{ range . }}
+            <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
+        {{ end }}
+    </ul>
+{{ end }}
+</footer>

+ 1 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/sidebar-custom.html

@@ -0,0 +1 @@
+<!-- Create <project-root>/layouts/partials/sidebar-custom.html to overwrite this empty template and put custom code into the sidebar section. -->

+ 23 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/sidebar.html

@@ -0,0 +1,23 @@
+<aside class="news-sidebar px-0 px-lg-3">
+  {{ partial "news-featured.html" . }}
+  {{ partial "taxonomies.html" . }}
+  <!-- <div class="input-group mb-3 search-bar">
+    <input type="text" class="form-control" placeholder="搜尋診所" aria-label="Recipient's username"
+      aria-describedby="search-btn">
+    <button class="btn search-btn pt-0" type="button" id="search-btn">
+      <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-search"
+        viewBox="0 0 16 16">
+        <path
+          d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z" />
+      </svg>
+    </button>
+  </div> -->
+
+  <!-- {{ if default true .Site.Params.sidebar.showRecent }}
+    {{ partial "recent" . }}
+  {{ end }} -->
+
+  <!-- {{ if default true .Site.Params.sidebar.showTaxonomy }}
+    {{ partial "taxonomies" . }}
+  {{ end }} -->
+</aside>

+ 29 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/taxonomies.html

@@ -0,0 +1,29 @@
+<section>
+  {{ range $taxonomyname, $taxonomy := .Site.Taxonomies }}
+  {{ if gt (len $taxonomy) 0 }}
+
+  {{ if eq $taxonomyname "tags" }}
+  <h3 class="post-block-title my-4">
+    <span>標籤</span>
+  </h3>
+  {{ else }}
+  <h3 class="post-block-title my-4">
+    <span>分類</span>
+  </h3>
+  {{ end }}
+
+  <p>
+    {{ range $name, $value := $taxonomy }}
+    <a class="btn btn-small badge tags" href="{{ printf  $taxonomyname | relLangURL }}/{{ $name | urlize }}/">
+      <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-tag-fill"
+        viewBox="0 0 16 16">
+        <path
+          d="M2 1a1 1 0 0 0-1 1v4.586a1 1 0 0 0 .293.707l7 7a1 1 0 0 0 1.414 0l4.586-4.586a1 1 0 0 0 0-1.414l-7-7A1 1 0 0 0 6.586 1H2zm4 3.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z" />
+      </svg>
+      {{ $name }}
+    </a>
+    {{ end }}
+  </p>
+  {{ end }}
+  {{ end }}
+</section>

+ 10 - 0
news_templates/themes/hugo-bootstrap-5/layouts/partials/translations.html

@@ -0,0 +1,10 @@
+{{ if .IsTranslated }}
+    <h4>{{ i18n "translations" }}</h4>
+    <ul>
+        {{ range .Translations }}
+        <li>
+            <a href="{{ .RelPermalink }}">{{ .Lang }}: {{ .Title }}</a>
+        </li>
+        {{ end }}
+    </ul>
+{{ end }}

+ 8 - 0
news_templates/themes/hugo-bootstrap-5/static/css/style.css

@@ -0,0 +1,8 @@
+.blog-header, .blog-post, .blog-pagination {
+  margin-bottom: 2rem;
+}
+
+/* Make sure the image size is reasonable. */
+.blog-post img {
+  max-width: 100%;
+}

+ 17 - 0
news_templates/themes/hugo-bootstrap-5/theme.toml

@@ -0,0 +1,17 @@
+name = "Hugo Bootstrap 5"
+license = "MIT"
+licenselink = "https://github.com/NotWoods/hugo-bootstrap-5/blob/master/LICENSE.md"
+description = "A simple hugo theme using Bootstrap 5"
+homepage = "https://github.com/NotWoods/hugo-bootstrap-5"
+tags = ["blog", "multilingual", "bootstrap"]
+features = ["blog", "responsive", "Google Analytics", "bootstrap", "multilingual", "i18n"]
+min_version = 0.56
+
+[author]
+  name = "Tiger Oakes"
+  homepage = "https://tigeroakes.com"
+
+[original]
+  author =  "Mihail Cristian Dumitru"
+  homepage = "https://github.com/Xzya"
+  repo = "https://github.com/Xzya/hugo-bootstrap"

+ 124 - 0
static/css/reset.css

@@ -0,0 +1,124 @@
+html,
+body,
+div,
+span,
+applet,
+object,
+iframe,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+blockquote,
+pre,
+a,
+abbr,
+acronym,
+address,
+big,
+cite,
+code,
+del,
+dfn,
+em,
+img,
+ins,
+kbd,
+q,
+s,
+samp,
+small,
+strike,
+strong,
+sub,
+sup,
+tt,
+var,
+b,
+u,
+i,
+center,
+dl,
+dt,
+dd,
+ol,
+ul,
+li,
+fieldset,
+form,
+label,
+legend,
+table,
+caption,
+tbody,
+tfoot,
+thead,
+tr,
+th,
+td,
+article,
+aside,
+canvas,
+details,
+embed,
+figure,
+figcaption,
+footer,
+header,
+hgroup,
+menu,
+nav,
+output,
+ruby,
+section,
+summary,
+time,
+mark,
+audio,
+video {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-size: 100%;
+  vertical-align: baseline;
+}
+
+/* HTML5 display-role reset for older browsers */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+menu,
+nav,
+section {
+  display: block;
+}
+
+body {
+  line-height: 1;
+}
+
+blockquote,
+q {
+  quotes: none;
+}
+
+blockquote:before,
+blockquote:after,
+q:before,
+q:after {
+  content: '';
+  content: none;
+}
+
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}

+ 438 - 0
static/css/style.css

@@ -0,0 +1,438 @@
+@charset "UTF-8";
+/* 共通樣式 */
+:root {
+  --main-color: #000;
+  --sub-color: #e47140;
+  --gray-color: #727272;
+}
+
+* {
+  letter-spacing: 1px;
+  font-weight: 400;
+  font-family: "Noto Sans TC", sans-serif !important;
+}
+
+h2 {
+  margin-bottom: 1rem;
+}
+
+p,
+li {
+  line-height: 32px;
+}
+
+img {
+  width: 100%;
+  height: auto;
+}
+
+html,
+body {
+  height: 100%;
+  margin: 0;
+}
+
+body {
+  display: flex;
+  flex-direction: column;
+  overflow-y: scroll;
+}
+
+.btn:focus,
+.form-control:focus {
+  border-color: var(--main-color) !important;
+  box-shadow: none !important;
+  outline: 0 none !important;
+}
+
+.badge {
+  font-weight: 400 !important;
+}
+
+.navbar {
+  background-color: var(--main-color) !important;
+}
+.navbar .navbar-collapse {
+  flex-grow: 0;
+}
+.navbar .navbar-brand {
+  font-size: 50px;
+  font-weight: 500;
+  font-family: "Roboto Slab", serif !important;
+  color: var(--sub-color);
+  transition: all 0.3s;
+}
+@media (max-width: 575px) {
+  .navbar .navbar-brand {
+    padding-left: 1rem;
+    font-size: 35px;
+  }
+}
+.navbar .navbar-brand:hover {
+  opacity: 0.9;
+  color: var(--sub-color);
+}
+
+.blog-post-tags .badge {
+  background-color: var(--main-color);
+}
+.blog-post-tags .badge:hover {
+  color: var(--main-color);
+  background-color: #fff;
+  border: 1px solid var(--main-color);
+}
+
+.blog-post-title {
+  margin: 10px 0 20px;
+}
+.blog-post-title a {
+  font-size: 50px;
+  font-weight: 600;
+}
+
+.pagination {
+  justify-content: center;
+}
+.pagination .page-link {
+  color: var(--main-color);
+}
+.pagination .page-item.active .page-link {
+  z-index: 3;
+  color: #fff;
+  background-color: var(--main-color);
+  border-color: var(--main-color);
+}
+
+.post-title a {
+  color: #000;
+  text-decoration: none;
+  font-size: 22px;
+  font-weight: 500;
+}
+
+.post-block-title {
+  margin-bottom: 20px;
+  position: relative;
+  font-size: 22px;
+}
+.post-block-title::after {
+  position: absolute;
+  z-index: -10;
+  top: 15px;
+  left: 0;
+  width: 100%;
+  height: 0px;
+  content: "";
+  border-bottom: 1px solid #929292;
+  bottom: 5px;
+}
+.post-block-title span {
+  font-weight: 500;
+  background: #fff;
+}
+
+.news-info {
+  margin-top: 10px;
+  line-height: 20px;
+}
+.news-info a {
+  font-size: 14px;
+  font-weight: 500;
+  color: var(--gray-color);
+  text-decoration: none;
+  transition: all 0.3s;
+}
+.news-info a:hover {
+  opacity: 0.8;
+}
+.news-info small {
+  color: var(--gray-color);
+}
+
+.news-thumbnail {
+  height: 100%;
+  -o-object-fit: cover;
+     object-fit: cover;
+}
+
+.line-clamp {
+  max-width: 150px;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.post-depiction {
+  margin: 10px 0;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  line-height: 26px;
+}
+.post-depiction a {
+  color: #7a7a7a;
+  text-decoration: none;
+}
+
+.top-btn {
+  position: fixed;
+  bottom: 15px;
+  right: 15px;
+  z-index: 10;
+  opacity: 0;
+  transition: all 0.5s;
+}
+.top-btn button {
+  border: none;
+  background: var(--sub-color);
+  border-radius: 100px;
+  width: 55px;
+  height: 55px;
+}
+
+.show {
+  opacity: 1;
+}
+
+.blog-header .nav-item {
+  padding: 0 0.3rem;
+}
+@media (max-width: 575px) {
+  .blog-header .nav-item {
+    padding: 0 1rem;
+  }
+}
+
+/* sidebar.html Start */
+.news-sidebar {
+  position: sticky;
+  top: 15px;
+}
+.news-sidebar .news-featured {
+  position: unset;
+}
+
+.search-btn {
+  border: 1px solid var(--main-color) !important;
+}
+.search-btn svg {
+  color: var(--main-color);
+}
+.search-btn:hover {
+  background-color: var(--main-color) !important;
+}
+.search-btn:hover svg {
+  color: #fff;
+}
+
+.tags {
+  margin: 0 5px 5px 0;
+  padding: 7px 10px !important;
+  font-size: 14px !important;
+  font-weight: 400 !important;
+  color: var(--main-color) !important;
+  border: 1px solid var(--main-color) !important;
+}
+.tags:hover {
+  color: #fff !important;
+  background-color: var(--main-color);
+}
+
+/* sidebar.html End */
+/* single.html Start */
+.blog-post.content h4 {
+  margin-top: 3rem;
+  font-size: 1.25rem;
+  font-weight: 500;
+  line-height: 32px;
+}
+.blog-post.content h4 a {
+  padding: 5px 8px;
+  margin-right: 3px;
+  border: 1px solid #000;
+  border-radius: 5px;
+  font-size: 14px;
+}
+.blog-post.content h4 a:hover {
+  color: #fff !important;
+}
+.blog-post.content .back-link {
+  color: #000;
+  display: block;
+  text-align: center;
+  text-decoration: none;
+  transition: all 0.3s;
+}
+.blog-post.content .back-link:hover {
+  opacity: 0.7;
+}
+
+/* single.html End */
+/* content.html Start */
+.news-main {
+  height: 100%;
+  overflow: hidden;
+}
+.news-main .post-title a {
+  font-size: 34px;
+}
+.news-main img {
+  height: 100%;
+  -o-object-fit: cover;
+     object-fit: cover;
+}
+.news-main .news-info a {
+  font-size: 16px;
+}
+
+/* content.html End */
+/* focus.html Start */
+.focus-content {
+  position: sticky;
+  top: 20px;
+}
+
+.focus-content img,
+.news-featured img {
+  height: 175px;
+  -o-object-fit: cover;
+     object-fit: cover;
+}
+.focus-content .post-title,
+.news-featured .post-title {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  line-break: after-white-space;
+}
+
+/* focus.html End */
+/* recent.html Start */
+.recent-content .news-list {
+  margin: 0;
+}
+.recent-content .news-list li {
+  margin: 15px 0;
+}
+.recent-content .news-list li img {
+  width: 140px;
+  height: 105px;
+  -o-object-fit: cover;
+     object-fit: cover;
+}
+.recent-content .news-list li small {
+  display: block;
+}
+.recent-content .news-list li .news-info {
+  margin-top: 0px;
+}
+.recent-content .news-list li:last-child {
+  margin: 0;
+}
+
+/* recent.html End */
+/* news-tab.html Start */
+.tab-category .nav-link {
+  color: var(--main-color);
+  font-weight: 500;
+}
+.tab-category .nav-pills .nav-link.active,
+.tab-category .nav-pills .show > .nav-link {
+  color: var(--sub-color);
+  background-color: var(--main-color);
+}
+
+.tab-content .bg-img {
+  position: relative;
+  height: 370px;
+  background-blend-mode: multiply;
+  background-size: cover;
+  background-position: center center;
+  cursor: pointer;
+}
+.tab-content .bg-img section {
+  padding: 10px 25px;
+  position: absolute;
+  bottom: 0;
+  color: #fff;
+}
+.tab-content .bg-img section a {
+  color: #fff;
+  text-decoration: none;
+}
+.tab-content .bg-img section small {
+  font-size: 12px;
+}
+.tab-content .col-5 img {
+  height: 150px;
+}
+
+/* news-tab.html End */
+/* news-all.html Start */
+.news-all .post-title {
+  margin: 5px auto;
+}
+.news-all .post-title a {
+  font-size: 36px;
+  line-height: 1.5;
+  display: -webkit-box;
+  -webkit-line-clamp: 2; /* 限制最多兩行 */
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  word-break: break-word;
+  transition: all 0.3s;
+}
+.news-all .post-title a:hover {
+  opacity: 0.7;
+}
+.news-all .post-description {
+  text-decoration: none;
+  transition: all 0.3s;
+}
+.news-all .post-description:hover {
+  opacity: 0.7;
+}
+.news-all .post-description p {
+  color: #727272;
+}
+.news-all .news-info a {
+  font-size: 18px;
+}
+.news-all hr {
+  margin: 1.5rem 0;
+}
+.news-all .first-img {
+  height: 50vh;
+  -o-object-fit: cover;
+     object-fit: cover;
+}
+.news-all .line {
+  padding: 0 12px;
+}
+.news-all .cover-img {
+  width: 100%;
+  height: 220px;
+  -o-object-fit: cover;
+     object-fit: cover;
+}
+
+/* news-all.html End */
+/* news-featured.html Start */
+.news-featured {
+  position: sticky;
+  top: 20px;
+}
+
+/* news-featured.html End */
+.cover-img {
+  height: 280px;
+  -o-object-fit: cover;
+     object-fit: cover;
+}/*# sourceMappingURL=style.css.map */

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
static/css/style.css.map


+ 521 - 0
static/css/style.scss

@@ -0,0 +1,521 @@
+/* 共通樣式 */
+
+:root {
+  --main-color: #000;
+  --sub-color: #e47140;
+  --gray-color: #727272;
+}
+
+* {
+  letter-spacing: 1px;
+  font-weight: 400;
+  font-family: "Noto Sans TC", sans-serif !important;
+}
+
+h2 {
+  margin-bottom: 1rem;
+}
+
+p,
+li {
+  line-height: 32px;
+}
+
+img {
+  width: 100%;
+  height: auto;
+}
+
+html,
+body {
+  height: 100%;
+  margin: 0;
+}
+
+body {
+  display: flex;
+  flex-direction: column;
+  overflow-y: scroll;
+}
+
+.btn:focus,
+.form-control:focus {
+  border-color: var(--main-color) !important;
+  box-shadow: none !important;
+  outline: 0 none !important;
+}
+
+.badge {
+  font-weight: 400 !important;
+}
+
+.navbar {
+  background-color: var(--main-color) !important;
+
+  .navbar-collapse {
+    flex-grow: 0;
+  }
+
+  .navbar-brand {
+    font-size: 50px;
+    font-weight: 500;
+    font-family: "Roboto Slab", serif !important;
+    color: var(--sub-color);
+    transition: all 0.3s;
+
+    @media (max-width: 575px) {
+      padding-left: 1rem;
+      font-size: 35px;
+    }
+
+    &:hover {
+      opacity: 0.9;
+      color: var(--sub-color);
+    }
+  }
+}
+
+.blog-post-tags {
+  .badge {
+    background-color: var(--main-color);
+
+    &:hover {
+      color: var(--main-color);
+      background-color: #fff;
+      border: 1px solid var(--main-color);
+    }
+  }
+}
+
+.blog-post-title {
+  margin: 10px 0 20px;
+
+  a {
+    font-size: 50px;
+    font-weight: 600;
+  }
+}
+
+.pagination {
+  justify-content: center;
+
+  .page-link {
+    color: var(--main-color);
+  }
+
+  .page-item.active .page-link {
+    z-index: 3;
+    color: #fff;
+    background-color: var(--main-color);
+    border-color: var(--main-color);
+  }
+}
+
+.post-title {
+  a {
+    color: #000;
+    text-decoration: none;
+    font-size: 22px;
+    font-weight: 500;
+  }
+}
+
+.post-block-title {
+  margin-bottom: 20px;
+  position: relative;
+  font-size: 22px;
+
+  &::after {
+    position: absolute;
+    z-index: -10;
+    top: 15px;
+    left: 0;
+    width: 100%;
+    height: 0px;
+    content: "";
+    border-bottom: 1px solid #929292;
+    bottom: 5px;
+  }
+
+  span {
+    font-weight: 500;
+    background: #fff;
+  }
+}
+
+.news-info {
+  margin-top: 10px;
+  line-height: 20px;
+
+  a {
+    font-size: 14px;
+    font-weight: 500;
+    color: var(--gray-color);
+    text-decoration: none;
+    transition: all 0.3s;
+
+    &:hover {
+      opacity: 0.8;
+    }
+  }
+
+  small {
+    color: var(--gray-color);
+  }
+}
+
+.news-thumbnail {
+  height: 100%;
+  object-fit: cover;
+}
+
+// 文字省略
+.line-clamp {
+  max-width: 150px;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.post-depiction {
+  // max-width: 350px;
+  margin: 10px 0;
+  display: -webkit-box;
+  -webkit-line-clamp: 2;
+  -webkit-box-orient: vertical;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  line-height: 26px;
+
+  a {
+    color: #7a7a7a;
+    text-decoration: none;
+  }
+}
+
+.top-btn {
+  position: fixed;
+  bottom: 15px;
+  right: 15px;
+  z-index: 10;
+  opacity: 0; // scrollTop = 0
+  transition: all 0.5s;
+
+  button {
+    border: none;
+    background: var(--sub-color);
+    border-radius: 100px;
+    width: 55px;
+    height: 55px;
+  }
+}
+
+.show {
+  opacity: 1; // scrollTop > 100
+}
+
+.blog-header {
+  .nav-item {
+    padding: 0 0.3rem;
+
+    @media (max-width: 575px) {
+      padding: 0 1rem;
+    }
+  }
+}
+
+/* sidebar.html Start */
+
+.news-sidebar {
+  position: sticky;
+  top: 15px;
+
+  .news-featured {
+    position: unset;
+  }
+}
+
+.search-btn {
+  border: 1px solid var(--main-color) !important;
+
+  svg {
+    color: var(--main-color);
+  }
+
+  &:hover {
+    background-color: var(--main-color) !important;
+
+    svg {
+      color: #fff;
+    }
+  }
+}
+
+.tags {
+  margin: 0 5px 5px 0;
+  padding: 7px 10px !important;
+  font-size: 14px !important;
+  font-weight: 400 !important;
+  color: var(--main-color) !important;
+  border: 1px solid var(--main-color) !important;
+
+  &:hover {
+    color: #fff !important;
+    background-color: var(--main-color);
+  }
+}
+
+/* sidebar.html End */
+
+/* single.html Start */
+
+.blog-post.content {
+  h4 {
+    margin-top: 3rem;
+    font-size: 1.25rem;
+    font-weight: 500;
+    line-height: 32px;
+
+    a {
+      padding: 5px 8px;
+      margin-right: 3px;
+      border: 1px solid #000;
+      border-radius: 5px;
+      font-size: 14px;
+
+      &:hover {
+        color: #fff !important;
+      }
+    }
+  }
+
+  .back-link {
+    color: #000;
+    display: block;
+    text-align: center;
+    text-decoration: none;
+    transition: all 0.3s;
+
+    &:hover {
+      opacity: 0.7;
+    }
+  }
+}
+
+/* single.html End */
+
+/* content.html Start */
+
+.news-main {
+  height: 100%;
+  overflow: hidden;
+
+  .post-title {
+    a {
+      font-size: 34px;
+    }
+  }
+
+  img {
+    height: 100%;
+    object-fit: cover;
+  }
+
+  .news-info {
+    a {
+      font-size: 16px;
+    }
+  }
+}
+
+/* content.html End */
+
+/* focus.html Start */
+
+.focus-content {
+  position: sticky;
+  top: 20px;
+}
+
+.focus-content,
+.news-featured {
+  img {
+    height: 175px;
+    object-fit: cover;
+  }
+
+  .post-title {
+    // 超過則省略
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: -webkit-box;
+    -webkit-line-clamp: 2;
+    -webkit-box-orient: vertical;
+    line-break: after-white-space;
+  }
+}
+
+/* focus.html End */
+
+/* recent.html Start */
+
+.recent-content {
+  .news-list {
+    margin: 0;
+
+    li {
+      margin: 15px 0;
+
+      img {
+        width: 140px;
+        height: 105px;
+        object-fit: cover;
+      }
+
+      small {
+        display: block;
+      }
+
+      .news-info {
+        margin-top: 0px;
+      }
+    }
+
+    li:last-child {
+      margin: 0;
+    }
+  }
+}
+
+/* recent.html End */
+
+/* news-tab.html Start */
+
+.tab-category {
+  .nav-link {
+    color: var(--main-color);
+    font-weight: 500;
+  }
+
+  .nav-pills .nav-link.active,
+  .nav-pills .show > .nav-link {
+    color: var(--sub-color);
+    background-color: var(--main-color);
+  }
+}
+
+.tab-content {
+  .bg-img {
+    position: relative;
+    height: 370px;
+    // 設置背景混和模式為相乘模式
+    background-blend-mode: multiply;
+    background-size: cover;
+    background-position: center center;
+    cursor: pointer;
+
+    section {
+      padding: 10px 25px;
+      position: absolute;
+      bottom: 0;
+      color: #fff;
+
+      a {
+        color: #fff;
+        text-decoration: none;
+      }
+
+      small {
+        font-size: 12px;
+      }
+    }
+  }
+
+  .col-5 {
+    img {
+      height: 150px;
+    }
+  }
+}
+
+/* news-tab.html End */
+
+/* news-all.html Start */
+
+.news-all {
+  .post-title {
+    margin: 5px auto;
+
+    a {
+      font-size: 36px;
+      line-height: 1.5;
+      display: -webkit-box;
+      -webkit-line-clamp: 2; /* 限制最多兩行 */
+      -webkit-box-orient: vertical;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      word-break: break-word;
+      transition: all 0.3s;
+
+      &:hover {
+        opacity: 0.7;
+      }
+    }
+  }
+
+  .post-description {
+    text-decoration: none;
+    transition: all 0.3s;
+
+    &:hover {
+      opacity: 0.7;
+    }
+
+    p {
+      color: #727272;
+    }
+  }
+
+  .news-info {
+    a {
+      font-size: 18px;
+    }
+  }
+
+  hr {
+    margin: 1.5rem 0;
+  }
+
+  .first-img {
+    height: 50vh;
+    object-fit: cover;
+  }
+
+  .line {
+    padding: 0 12px;
+  }
+
+  .cover-img {
+    width: 100%;
+    height: 220px;
+    object-fit: cover;
+  }
+}
+
+/* news-all.html End */
+
+/* news-featured.html Start */
+
+.news-featured {
+  position: sticky;
+  top: 20px;
+}
+
+/* news-featured.html End */
+
+.cover-img {
+  height: 280px;
+  object-fit: cover;
+}

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.