আর্কিটেকচার পোর্টফোলিও JBake - দৃষ্টিভঙ্গি এবং ব্যবহারের ক্ষেত্রs
প্রকাশিত: 15 January 2026
আর্কিটেকচারাল ভিশন
নির্দেশক নীতি
মহাখ্যাপনি উদ্বেগের বিভাজন নীটির ভিত্তিতে তৈরি :
-
Contenu : সমৃদ্ধ মেটাডেটা সহ গঠিত AsciiDoc ফাইল
-
প্রস্তুতি : টেমপ্লেট Thymeleaf পুন:ব্যবহারযোগ্য
-
ডেটা : JBake द्वारा AsciiDoc অ্যাট্রিবিউট থেকে স্বয়ংক্রিয়ভাবে মডেলটি নিষ্কাশিত হয়।
-
Style : Bootstrap 5 দৃশ্যমূলক সমন্বয়ের জন্য
রণনৈতিক পছন্দ : পোর্টফোলিও জন্য AsciiDoc
| মানক | লাভ |
|---|---|
সঙ্গতি |
ব্লগ পোস্টের মতো একই ফরম্যাট |
মেটাডেটা |
সংগঠিত এবং প্রসারণযোগ্য বৈশিষ্ট্য ( |
বজায় রাখার যোগ্যতা |
সহজ টেক্সট সম্পাদনা, Git-এ সংস্করণযোগ্য |
লবচতা |
সমৃদ্ধ সামগ্রী ধারণ করতে পারে (টেবিল, কোড, ছবি) |
টেম্প্লেটিং |
JBake স্বয়ংক্রিয়ভাবে Thymeleaf-এর জন্য বৈশিষ্ট্যাগুলি বের করে |
তথ্য মডেল
প্রতিটি পোর্টফোলিও প্রকল্প একটি AsciiDoc ডকুমেন্ট :
-
শিরোনামের মেটাডেটা : গঠিত তথ্য (গ্রাহক, সময়াবধি, প্রযুক্তি, এত্যাদি)
-
দকুমেন্টের শরীর : কাহিনীমূলক বর্ণনা, চ্যালেঞ্জ, সমাধান, ফলাফল
-
কাস্টম atribুট : প্রিফিক্সড`project-*`স্বয়ংক্রিয় এক্সট্র্যাকশনের জন্য
@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false
class ProjetAsciiDoc {
+titre: String
+jbake-type: "প্রজেক্ট"
+jbake-status: published|draft
+jbake-date: Date
+jbake-tags: List<String>
--
+project-category: String
+project-client: String
+project-duration: String
+project-role: String
+project-thumbnail: String
+project-gallery: List<String>
+project-tech-stack: String
+project-highlights: List<String>
+project-demo-url: String
+project-github-url: String
--
+body: HTML (converti)
}
class JBakeEngine {
+parse(asciidoc)
+extractMetadata()
+convertToHTML()
}
class ThymeleafTemplate {
+portfolio.html
+project.html
+partials/project-card.html
}
class PortfolioPage {
+published_projects: List
+filtres: categories
}
ProjetAsciiDoc --> JBakeEngine : পার্স
JBakeEngine --> ThymeleafTemplate : ডেটা প্রদান করে
ThymeleafTemplate --> PortfolioPage : উৎপন্ন করে
@enduml
বিস্তারিত ব্যবহারের ক্ষেত্র
UC1 : পোর্টফোলিয়োর মধ্যে একটি আইটেম যোগ করুন
নমিনাল প্রবাহ
@startuml skinparam backgroundColor #FEFEFE actor Développeur as dev participant "এডিটর\nটেক্সট" as editor participant "ফাইল\nAsciiDoc" as file participant "JBake\nইঞ্জিন" as jbake participant "সাইট\nস্ট্যাটিক" as site dev -> editor : নতুন ফাইল তৈরি করুন activate editor editor -> file : portfolio/nouveau-projet.adoc activate file dev -> editor : মেটাডেটা সহ শিরোনাম লিখুন\n(titre, type=project, status=published,\nattributs project-*) dev -> editor : কাহিনিমূলক উপবিন্যাস\n(প্রেক্ষিত, চ্যালেঞ্জ, সমাধান) dev -> editor : assets/img/portfolio/-এ ছবি যোগ করুন editor -> file : সংরক্ষণ deactivate editor dev -> jbake : বিল্ড চালু করুন (jbake -b) activate jbake jbake -> file : পড়া এবং পার্স করা jbake -> jbake : মেটাডেটা বের করা jbake -> jbake : রূপান্তরিত করা AsciiDoc → HTML jbake -> jbake : project.html টেমপ্লেট প্রয়োগ করুন jbake -> jbake : portfolio.html তালিকায় যোগ করুন jbake -> site : স্ট্যাটিক পৃষ্ঠা তৈরি deactivate jbake dev -> site : ফল যাচাই করুন activate site site --> dev : প্রকল্প দেখান deactivate site @enduml
তैयার করতে যাওয়া ফাইলের টেমপ্লেট
ডেভেলপার তৈরি করে`content/portfolio/nom-projet.adoc`একটি মানককৃত গঠন :
-
শিরোনাম সমস্ত প্রয়োজনীয় বৈশিষ্ট্য সহ
-
মানকীভুক্ত বিভাগ (প্রেক্ষাপট, চ্যালেঞ্জ, সমাধান, ফলাফল)
-
ছবির সামঞ্জস্যপূর্ণ নামকরণ
যাচাই পয়েন্ট
-
প্রয়োজনীয় বৈশিষ্ট্য উপস্থিত আছে (
jbake-type,jbake-status,project-thumbnail) -
সূচিত ছবিগুলো [_] মধ্যে বিদ্যমান`assets/img/portfolio/`
-
JBake বিল্ড ত্রুটি ছাড়া সফল হয়
-
প্রকল্পটি পোর্টফোলিও পৃষ্ঠায় দেখা যায়
-
প্রকল্পের স্বতন্ত্র পৃষ্ঠা সঠিকভাবে প্রদর্শিত হচ্ছে
UC2 : পোর্টফোলিও থেকে একটি আইটেম মুছুন
নামিনাল প্রবাহ
@startuml skinparam backgroundColor #FEFEFE actor Développeur as dev participant "সিস্টেম\nফাইল" as fs participant "JBake\nমोटর ???\n\nWait I typed incorrectly: Should be Bengali script: মোটর. Ensure correct unicode.\n\nFinal answer: JBake\nমোটর\n\nProceed.\n\n</think>\nJBake\nমোটর" as jbake participant "Site\nStatique" as site database "Cache\nJBake" as cache dev -> fs : /projet-ancien.adoc পোর্টফোলিও মুছে ফেল activate fs fs --> dev : ফাইল মুছে ফেলা হয়েছে deactivate fs dev -> fs : (ঐচ্ছিক) মুছুন চিত্র সংযুক্ত\nassets/img/portfolio/projet-ancien-* activate fs fs --> dev : ইমেজ মুছে ফেলা deactivate fs dev -> cache : ক্যাশ পরিষ্কার করুন JBake activate cache cache --> dev : ভিডিও ক্যাশ deactivate cache dev -> jbake : সম্পূর্ণ পুনর্নির্মাণ (jbake -b) activate jbake jbake -> jbake : স্ক্যানার content/portfolio/ jbake -> jbake : প্রোজেক্ট অনুপস্থিত → উৎপন্ন হয়নি jbake -> jbake : রিজেনারেট portfolio.html\n(অপসারিত প্রকল্প ছাড়া) jbake -> site : নতুন বিল্ড স্থাপন করুন deactivate jbake dev -> site : যাচাই activate site site --> dev : তালিকা থেকে অনুপস্থিত প্রজেক্ট deactivate site @enduml
বিকল্পিক কৌশল : সংরক্ষণ
শুধুমাত্র মুছে ফেলার পরিবর্তে, একটি ফোল্ডার তৈরি করা সম্ভব।content/portfolio/archive/:
-
ফাইলটি মুছে ফেলার বদলে স্থানান্তর করুন
-
সহজে পুনরুদ্ধার করা যায়
-
গিটের ইতিহাস আরও পরিষ্কার রাখুন
উপকরণ পরিষ্কারন
-
অশ্রেয় ছবি যাচাই করুন`assets/img/portfolio/`
-
অন্য প্রকল্প দ্বারা উল্লেখ করা না থাকা চিত্রগুলো মুছুন
-
JBake ক্যাশ পরিষ্কার করুন ফ্যান্টম রেফারেন্স এড়াতে
UC3 : অপ্রকাশিত (ড্র্যাফট) হিসাবে রাখুন
মানক ফ্ল্যাক্স
@startuml skinparam backgroundColor #FEFEFE actor Développeur as dev participant "ফাইল\nAsciiDoc" as file participant "JBake\nইঞ্জিন" as jbake participant "সাইট\nস্ট্যাটিক" as site dev -> file : পোর্টফোলিও খুলুন/projet.adoc activate file dev -> file : পরিবর্তন attribut\n:jbake-status: published\n↓\n:jbake-status: draft file --> dev : সুরক্ষিত deactivate file dev -> jbake : পুনর্নির্মাণ (jbake -b) activate jbake jbake -> file : ফাইলকে পার্স করুন jbake -> jbake : সন্ধান status=draft jbake -> jbake : published_projects থেকে বাদ দিন jbake -> jbake : পাবলিক পৃষ্ঠা তৈরি করবেন না note right প্রোজেক্টটি এখনও বিদ্যমান আছে কিন্তু এটি প্রকাশ করা হয়নি end note jbake -> site : সাইট তৈরি (এই প্রকল্প ছাড়াই) deactivate jbake dev -> site : পোর্টফোলিও যাচাই করুন activate site site --> dev : প্রকাশিত তালিকা থেকে প্রকল্প অনুপস্থিত deactivate site @enduml
সম্ভাব্য অবস্থা
@startuml skinparam backgroundColor #FEFEFE [*] --> Draft : Création initiale Draft --> Published : যাচাইকরণ এবং প্রকাশন Published --> Draft : অস্থায়ী উনয়ন Draft --> Archived : প্রত্যাহারিত প্রকল্প Published --> Archived : বাতিল প্রকল্প Archived --> [*] : স্থায়ী মুছে ফেলা Published --> Published : আপডেট note right of Draft :jbake-status: draft সর্বজনীনভাবে দৃশ্য নয় চলমান প্রকল্পের জন্য উপযোগী end note note right of Published :jbake-status: published Visible sur le portfolio Indexé par JBake end note note right of Archived archive/এ স্থানান্তরিত অথবা jbake-status: archived প্রকাশিত নয় কিন্তু সংরক্ষিত end note @enduml
প্রয়োগের সাধারণ ক্ষেত্র
-
ড্রাফট প্রকল্প : ড্রাফট তৈরি, প্রকাশ করো যখন prepared
-
অস্থায়ীভাবে গোপনীয় প্রজেক্ট : ড্রাফটে রাখা ক্লায়েন্ট সম্মতির মেয়াদে
-
বড় আপডেট : ড্র্যাফটে যাওয়া, সম্পাদনা করা, পুনঃপ্রকাশ করা
-
A/B testing : ড্রাফটে ডুপ্লিকেট করা, পরীক্ষা করা, শ্রেষ্ঠ সংস্করণটি প্রকাশ করা
টেমপ্লেটিং আর্কিটেকচার
পুনরায় ব্যবহারযোগ্য টেমপ্লেট কৌশল
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
package "Templates Thymeleaf" {
component [index.html] as index
component [portfolio.html] as portfolio
component [project.html] as project
package "Partials" {
component [header.html] as header
component [footer.html] as footer
component [project-card.html] as card
component [tech-badge.html] as badge
component [gallery.html] as gallery
}
}
package "ডেটা JBake" {
database "published_projects" as data
database "content (প্রকল্প)" as content
}
index --> header
index --> footer
portfolio --> header
portfolio --> footer
portfolio --> card
data --> portfolio : পুনরাবৃত্তি
project --> header
project --> footer
project --> badge
project --> gallery
content --> project : ব্যক্তিগত প্রকল্প
note right of card
পুনরাবৃত্তি যোগ্য অংশ
একটি প্রকল্প মানচিত্র দেখানোর জন্য
:
- থাম্বনেইল
- শিরোনাম
- ট্যাগ
- হাইলাইটস
end note
@enduml
ডেটা এক্সট্র্যাকশন প্যাটার্ন
JBake স্বয়ংক্রিয়ভাবে AsciiDoc বৈশিষ্ট্য গুলোকে Thymeleaf-এ অ্যাক্সেসযোগ্য বৈশিষ্ট্য-এ রূপান্তর করে:
@startuml
skinparam backgroundColor #FEFEFE
rectangle "AsciiDoc ডকুমেন্ট" {
(":project-client: অ্যাকমি কর্প") as attr1
(":project-duration: ৬ মাস") as attr2
(":project-tags: java, react") as attr3
}
rectangle "JBake মডেল" {
(content['project-client']) as prop1
(content['project-duration']) as prop2
(content.tags) as prop3
}
rectangle "Thymeleaf টেমপ্লেট" {
(th:text="${project['project-client']}") as tmpl1
(th:text="${project['project-duration']}") as tmpl2
(th:each="ট্যাগ : ${project.tags}") as tmpl3
}
attr1 --> prop1 : parsing
attr2 --> prop2 : parsing
attr3 --> prop3 : parsing
prop1 --> tmpl1 : binding
prop2 --> tmpl2 : binding
prop3 --> tmpl3 : binding
@enduml
নামকরণের নিয়মাবলী
-
প্রকল্পের বৈশিষ্ট্য : উপসর্গ`project-*` (ex:
project-client,project-tech-stack) -
ফাইল : kebab-case (ex:`ecommerce-platform.adoc`)
-
ছবি : প্রিফিক্স প্রকল্পের নাম (উদাহরণ:`ecommerce-platform-thumb.jpg`)
-
টেমপ্লেট : ফাংশনাল নাম (উদাহরণ:`project-card.html`,
tech-badge.html)
প্রকাশনের ওয়ার্কফ্লো
উন্নয়ন পাইপলাইন
@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false
class ProjetAsciiDoc {
+titre: String
+jbake-type: "প্রকল্প"
+jbake-status: published|draft
+jbake-date: Date
+jbake-tags: List<String>
__
+project-category: String
+project-client: String
+project-duration: String
+project-role: String
+project-thumbnail: String
+project-gallery: List<String>
+project-tech-stack: String
+project-highlights: List<String>
+project-demo-url: String
+project-github-url: String
__
+body: HTML (converti)
}
class JBakeEngine {
+parse(asciidoc)
+extractMetadata()
+convertToHTML()
}
class ThymeleafTemplate {
+portfolio.html
+project.html
+partials/project-card.html
}
class PortfolioPage {
+published_projects: List
+filtres: categories
}
ProjetAsciiDoc --> JBakeEngine : parse
JBakeEngine --> ThymeleafTemplate : ডেটা সরবরাহ করে
ThymeleafTemplate --> PortfolioPage : উৎপন্ন করে
@enduml
পরিবেশ
| পরিবেশ | ব্যবহার | স্বीकৃত স্ট্যাটাস |
|---|---|---|
স্থানীয় |
ডেভেলপমেন্ট এবং প্রিভিউ |
প্রলিপি, প্রকাশিত |
মঞ্চন |
প্রি‑উৎপাদন যাচাই |
শুধুমাত্র প্রকাশিত |
উৎপাদন |
জনসাধারণের সাইট |
শুধু প্রকাশিত |
প্রসারযোগ্যতা
নতুন বৈশিষ্ট্যের যোগ
ডেটা মডেলকে সমৃদ্ধ করতে, শুধুমাত্র নতুন প্রিফিক্সযুক্ত বৈশিষ্ট্য যোগ করুন।project-* :
-
`project-awards’: পুরস্কার ও স্বীকৃতি'
-
project-testimonial: গ্রাহক উদ্ধৃতি -
`project-team-size`টিমের আকার
-
project-budget-range: বাজেট রেঞ্জ
এই বৈশিষ্ট্যগুলি স্বয়ংক্রিয়ভাবে টেমপ্লেটে উপলব্ধ হয়, JBake ইঞ্জিনে কোনো পরিবর্তন ছাড়া।
উন্নত শ্রেণীবিন্যাস
@startuml
skinparam backgroundColor #FEFEFE
object Projet {
project-category = "ওয়েব"
project-subcategory = "ই-কমার্স"
project-industry = "রিটেইল"
project-complexity = "উচ্চ"
}
object Taxonomie {
categories : [web, mobile, data, devops]
subcategories : Map<category, List>
industries : [retail, finance, healthcare, ...]
complexities : [low, medium, high]
}
Projet --> Taxonomie : শ্রেণিবদ্ধ অনুযায়ী
note right of Taxonomie
অনুমতি দেয় বহু-মানদণ্ড ফিল্টারিং
টেমপ্লেট portfolio.html-এ
JavaScript-এর মাধ্যমে অথবা সার্ভারের পাশ থেকে
end note
@enduml
ভালো অনুশীলন
ফাইল সংগঠন
-
একটি ফাইল = একটি প্রকল্প : একাধিক প্রকল্প মিশ্রণ এড়াতে
-
বিশেষ ফোল্ডারের ছবি :`assets/img/portfolio/nom-projet/`
-
নomenclature সমন্বিত: অনুসন্ধান ও রক্ষণাবেক্ষণ সহজ করে
-
Versioning Git : পরিবর্তন들의 সম্পূর্ণ ট্র্যাকিং
বিষয়বস্তু পরিচালনা
-
ড্রাফট ডিফল্ট স্ট্যাটাস : শুধুমাত্র তখন প্রকাশ কর যখন প্রস্তুত
-
প্রকাশ-পূর্ব সমীক্ষা: গুণমান এবং গোপনীয়তা যাচাই
-
সম্পূর্ণ মেটাডেটা : সব প্রাসঙ্গিক ক্ষেত্র পূর্ণ করুন
-
ধনী নারেটিভ কনটেন্ট : মেটাডেটায় শুধু আটকে থাকবেন না
কর্মক্ষমতা
-
ছবি অপ্টিমাইজেশন: প্রি-কমিট কম্প্রেশন
-
প্যাগিনেশন যদি প্রয়োজন হয় : যদি ২০টির বেশি প্রকল্প
-
Lazy loading : চাহিদা অনুযায়ী লোড করা গ্যালেরি ছবিগুলো
-
ব্রাউজার ক্যাশ : উপযুক্ত হেডারস এসেটসের জন্য
উপসংহার
এই আর্কিটেকচারটি অনুমতি দেয়:
-
সহজ ব্যবহার : একটি প্রকল্প যোগ করুন = একটি টেক্সট ফাইল তৈরি করুন
-
ফ্লেক্সিবিলিটি : নতুন বৈশিষ্ট্য দিয়ে প্রসারনযোগ্য
-
বক্ষণযোগ্যতা : বিষয়বস্তু/প্রস্তুতি বিভাজন
-
অনুসন্ধানযোগ্যতা : সম্পূর্ণ Git versioning
-
অটোমেশন : বিল্ড ও ধ্রুবিক বিন্যাস সম্ভব
AsciiDoc নির্বাচন করে সাইটের বাকি অংশের সাথে সামঞ্জস্য বজায় রাখে এবং এছাড়া একটি পেশাদার পোর্টফোলিওর জন্য প্রয়োজনীয় মেটাডেটার সমৃদ্ধি প্রদান করে।