TIQ, a global leader in automated time tracking systems for law firms and other professional services organisations, is proud to announce that Danish leading full-service law firm Kromann Reumert successfully deployed TIQ Time to its 300 fee-earners.
Kromann Reumert employs a team of around 500 dedicated people across their three offices in Copenhagen, Aarhus, and London. The firm was looking to replace its existing, custom-build and SharePoint-based time recording system.
Kromann Reumert’s Head of IT Jacob Brønnum-Schou:
Our existing time recording system was too static, making it very hard to introduce new features. We decided to explore the market to find a company that was 100% focused on time tracking and recording solutions. The funny thing was that we kept running into TIQ at various places around Europe. TIQ could provide a solution – TIQ Time – that supported our dynamic approach and was more intelligent than the old software.
Kromann Reumert also looked at other solutions available in the market. Jacob explained:
During our search, we discovered that competing companies came up with project proposals like we ran them in the past and that doesn’t fit with Kromann Reumert anymore. We like to run agile projects and focus on a single solution only, not a slew of other applications co-offered with time tracking solutions. I was sometimes under the impression that many companies out there don’t listen enough to existing requirements and try to sell a complete strategy instead of a simple solution.
The approach Kromann Reumert used towards the implementation was quite daring. Instead of a standard Proof of Concept (PoC) during which new software is installed in a test environment, Jacob decided to do the PoC in the production environment to determine if migrating users from the old system to TIQ would be a smooth process. Jacob:
TIQ accepted this challenge and built our environment in just over a month time. We then trained the 20 pilot users for half an hour, after which they started to use TIQ Time for the first time. The most interesting observation was that we didn’t receive any technical support calls. After the pilot group worked for more than a month with TIQ Time, we decided to roll out the rest of the firm in batches of users.
Kromann Reumert decided to train all fee-earners instead of letting TIQ do the training. Jacob explains why: “We took this approach because we have many business rules in place that need to be respected by people writing time and sending invoices. These rules are firm-specific and have nothing to do with the TIQ application itself.”
Jacob made another exciting observation that users pro-actively asked to be migrated to TIQ Time after discovering how pleased migrated colleagues were with the new system. This month, Kromann Reumert will migrate the last batch of users, after which the firm can close the project with confidence.
Kromann Reumert is a leading law firm in Denmark with offices in Copenhagen, Aarhus and London. The firm employs a team of almost 500 dedicated people who work together to provide quality services for their clients. Currently, the number of employees include around 300 lawyers covering a long list of practice areas.
TIQ Time helps lawyers build a complete and consistent timesheet, helping firms to reduce leakage, increase their bottom-line and optimise insights and transparency in service delivery.
I’ve been involved with the design, development and management of TIQ Time since day one. My activities for TIQ Time include:
Want to read more? Check out all related posts under legal tech.
TIQ, provider of cloud-based time capture technology for legal professionals, has implemented the solution at Ecovis STLex Studio Legale Tributario.
TIQ is delighted to announce the formal rollout of its innovative time tracking software at the Torino, Milan and Genova offices of the global consulting firm Ecovis International. All fee earners practicing law and tax consulting at ECOVIS STLex Italy are now using TIQ Time to unlock critical data insights and reduce time leakage.
Emilio Martinotti, Managing Partner at ECOVIS STLex Italy:
We used to track our time in our ERP system, which was a particularly slow and manual process. The fact that the time entries in TIQ Time are already filled out and the description is very precise is, in my opinion, great. As a result, we have seen an improvement in the range of 20% to 30% in the number of hours captured in our consultants’ timesheets.
ECOVIS STLex Italy sought an innovative solution to address some pain points the firm’s consultants were experiencing with tracking time. Using TIQ’s suggested time entries, fee-earners now speed up and spent less time filling out timesheets, therefore increasing productivity and reducing the cost of administrative work. The use of narrative templates, both for captured entries and manual entries, improved the quality and consistency of time entries, making it easier to gain insights for service delivery and allowing a day-by-day upload of the activities performed.
Martinotti:
We have many clients that ask for work to be completed on a fixed fee basis. If you agree that it’s €10,000 for the job, then you need to know how much work you can feasibly do for that amount of money. TIQ Time not only captures all the hours our consultants are working, but also develops business intelligence. We even expect further improvements in the automatic matching of captured time with each assignment and in the dashboards.
Before formally adopting TIQ Time, ECOVIS STLex Italy spoke at length another Italian law firm which had implemented TIQ. The firm’s leaders wanted a solution that provided end-to-end support throughout the implementation period – and beyond.
“As a managing partner in charge of technological improvement, it was great for me to talk directly with an existing client of TIQ Time. In fact, I think this was one of the reasons we decided to proceed with TIQ. The customer success team was incredibly helpful too. We really liked the support they provided initially, presenting and explaining the service and training our team. It is important that an IT vendor is not just selling a solution but also helping us manage the change.”
ECOVIS STLex - Studio Legale Tributario is a professional firm performing Tax, legal, accounting, audit, management, payroll, outsourcing consulting and services. ECOVIS STLex is the member firm of ECOVIS ® International in Italy. To date, the professional association counts about 12 partners, 44 professionals, 42 staff, 4 Of Counsel and therefore more than 100 people in the three offices of Milan, Genoa and Turin.
TIQ Time helps lawyers build a complete and consistent timesheet, helping firms to reduce leakage, increase their bottom-line and optimise insights and transparency in service delivery.
I’ve been involved with the design, development and management of TIQ Time since day one. My activities for TIQ Time include:
Want to read more? Check out all related posts under legal tech.
From proof of concept to successful go-live in just four months using a 100% virtual implementation methodology.
TIQ, a global leader in automated time tracking systems for law firms and other professional services organisations, announced today that European leading full-service law firm Cuatrecasas replaced its legacy Intapp time tracking solution with TIQ’s best-of-breed time capture solution.
TIQ Time is a fully automated cloud-based time tracking and capturing system, helping law firms to reduce time leakage, thereby increasing bottom-line results while at the same time increasing transparency in service delivery. TIQ Time integrates with productivity software like Microsoft Office and document management systems, collaboration software like Microsoft Teams and Zoom and all major practice management systems. These integrations allow fee earners to work with the most modern time capturing solution available while not disturbing existing business processes.
For Cuatrecasas, TIQ developed new integrations to connect TIQ Time with SAP (practice management) and NetDocuments (document management). Another option worth mentioning is the Zoom integration, making it possible for Cuatrecasas to capture all time spent by fee earners while meeting online.
Francesc Muñoz, Cuatrecasas’ CIO, commented:
The software is excellent, and the integrations with other systems work very fast and are stable. Overall, the performance is much better than what we had before. Working with TIQ was a very positive experience, and for our firm, it also helped that TIQ is a European-based company.
During the whole project – from sales to implementation – no physical meetings took place between TIQ and Cuatrecasas. The project was delivered remotely – on time and budget – without any issues. Muñoz:
We have never met the guys from TIQ, only their CEO Nick Schils. The first time I met Nick was in July, weeks after the system went live in our firm.
Cuatrecasas project co-lead Roberto López commented:
Our users are pleased with the new time tracking solution. The little feedback we have received so far is very positive. The fact that we received little feedback is actually the best news because swapping systems always causes inconvenience for the users. Apparently, this swap resulted in little resistance for change.
User training was kept to a minimum: a 30-minute online training session combined with a go-live video was all it took to get the firm going with the new software. The first billing cycle - one month after go-live, completed successfully without any noticeable issues.
TIQ’s CEO Nick Schils:
Working together with Francesc, Roberto, and the rest of the Cuatrecasas team was an incredible and effective experience. The level of IT knowledge and experience at Cuatrecasas resulted in a smooth integration and onboarding. At TIQ, we are proud to onboard one of Europe’s largest law firms, and it is a great step towards the future. This project is an amazing example of what can be achieved with a world-class team and as a forerunner in the digital transformation of law firms. By leveraging the modern architecture offered by TIQ’s software, Cuatrecasas can utilise the insights from TIQ optimally, from IT to day-to-day operations and finance.
Specialising in all areas of business law, Cuatrecasas is present in 14 countries, with a strong focus on Spain, Portugal and Latin America. Over 1,700 professionals based at 27 offices work as a single team: they collaborate, share challenges and work together to exceed clients’ expectations consistently
TIQ Time helps lawyers build a complete and consistent timesheet, helping firms to reduce leakage, increase their bottom-line and optimise insights and transparency in service delivery.
I’ve been involved with the design, development and management of TIQ Time since day one. My activities for TIQ Time include:
Want to read more? Check out all related posts under legal tech.
Molt Wengel, the largest provider of specialist legal advice to the Danish construction industry, has implemented TIQ Time. The best-of-breed time capture solution is rolled out to all legal specialists at the firm with a view of improving time tracking hygiene.
TIQ is pleased to announce that leading Danish construction law firm Molt Wengel implemented TIQ’s time capture software. Molt Wengel selected TIQ Time to address time tracking accuracy within the firm and to make the process of tracking time easier for its lawyers.
Kristoffer Giro, IT and Administrative Support Officer at Molt Wengel:
TIQ has made a significant improvement for the lawyers in their time tracking. One nuisance for our lawyers was to think back to all the small activities, like responding to an email in between the larger tasks. TIQ Time automatically captures those activities, such as sending an email or working on a document. The biggest benefit we’ve noticed is that the lawyers can review and approve all their time entries at the end of the day in a user friendly and modern interface, specifically designed for legal professionals.
TIQ Time integrates with the existing software in law firms to automatically capture time. When lawyers spend time drafting documents in word processors, sending emails, or attending meetings, TIQ generates time entries for those activities. Lawyers then open the application to approve, amend, or reject the time entries generated for them. This works to both improve the accuracy of time entries and reduce the time spent creating them.
Kristoffer Giro, IT and Administrative Support Officer at Molt Wengel:
When choosing software, we always consider the user-friendliness of the software and we look for solutions that are the best-of-breed. We also pride ourselves on being first movers. Implementing TIQ Time makes sense on the basis of our criteria.
Nick Schils, Founder and CEO of TIQ Time:
It is fantastic to see that the lawyers at Molt Wengel are benefitting from our software. TIQ Time is designed to perform as a specialty legal solution that streamlines and simplifies the process of tracking time. We are delighted to hear the lawyers at Molt Wengel are choosing TIQ Time over their former time tracking software. It demonstrates to us that we’re developing the software to be user-friendly and to deliver real time savings. Molt Wengel’s onboarding fits perfectly with the current developments in the Nordics and is a good example of our increasing growth in the region.
Located in Copenhagen, Molt Wengel is a Danish law firm specialising in national as well as international construction law. As strategic partners to the construction industry, we are dedicated to finding solutions that help our clients avoid deadlocks through dialogue, understanding and progress. Furthermore, we are the largest provider of specialist legal advice to the Danish construction industry. Our team comprises more than 25 legal specialists.
As specialists in construction law, our work starts where clauses and a passion for construction meet to create valuable advising for our clients. Our clients include leading players in the Danish and international construction industries, including contractors, private and public employers, and consultants. Our experience and expertise have given us a unique and considerable insight into how to avoid, mitigate, and handle challenges in complex construction projects.
TIQ Time helps lawyers build a complete and consistent timesheet, helping firms to reduce leakage, increase their bottom-line and optimise insights and transparency in service delivery.
I’ve been involved with the design, development and management of TIQ Time since day one. My activities for TIQ Time include:
Want to read more? Check out all related posts under legal tech.
CRS Group, the official TIQ Time system integrator in Italy, has implemented the best-of-breed time tracking solution at leading law firm RP Legal & Tax. The software has been adopted by more than 150 lawyers across the firm’s 7 offices.
TIQ is pleased to announce that leading Italian firm RP Legal & Tax implemented TIQ’s time registration software. RP Legal & Tax has been investigating legal service providers extensively as part of its planned upgrade and chose TIQ Time to further improve time recording.
Paolo Grandi, Partner and Member of the Board at RP Legal & Tax:
After an extensive selection process, we’ve found that TIQ Time offers a user experience that exceeds other products on the market. We were looking for a system specifically focused on the legal market to make sure that filling out timesheets is as easy as possible for our lawyers.
TIQ Time helps RP Legal & Tax lawyers build complete and consistent time entries via an add-on to the Practice Management System and Document Management System. To ensure that timesheet entry is as easy as possible for every fee-earner, TIQ automatically captures the time spent on activities, such as drafting documents, emails and meetings.
Paolo Grandi, Partner and Member of the Board at RP Legal & Tax:
“With our previous system, we found that time management was very time consuming. It was a manual process - with manual search and manual entry. By automating the process of time tracking, TIQ saves our lawyer’s time. More importantly, we’ve already noticed that our lawyers are tracking their time more consistent and we’re expecting to see an increase in revenue as a result.
Following the implementation of TIQ Time at other top-tier Italian law firms, CRS Group, was now responsible for rolling out the cloud solution at RP Legal & Tax as well.
Roberto Castiglia, Partner at CRS Group:
We are happy to partner with TIQ as the exclusive system integrator in Italy. We’re delighted with the results from all the implementations. It’s incredible to see how quickly TIQ Time enhances the relationship between law firms and their clients, thanks to the transparency and insights the software delivers.
As part of the upgrade, RP Legal & Tax wanted a time capture solution that was easy-to-use, responsive, and agile. However, since their software upgrade was happening incrementally, they sought a solution that integrates with both the older and newer practice management systems.
Nick Schils, CEO at TIQ:
We are delighted to welcome RP Legal & Tax to our customer base. The partnership with system integrator CRS Group allows us to offer the most advanced time tracking solutions in the Italian market. For RP Legal & Tax, this means they can provide their fee-earners a way to effortlessly construct clear narratives and capture all activities throughout the day. We look forward to welcoming more Italian customers this year.
RP Legal & Tax is an independent Italian law and tax firm, founded in 1949, with 7 offices throughout Italy, major international links, and more than one hundred and seventy highly skilled professionals providing full-service assistance. Its partners and consultants are recognised as leading authorities in their chosen disciplines.
RP Legal & Tax provides both international clients who do business in Italy and Italian clients abroad with first-class legal and tax advice, along with the necessary support to bridge the cultural gaps which are an inevitable feature of any international business venture. The firm credits its constant exchange of information and know-how between its leading professionals for its global view on all relevant legal issues, particularly in complex matters.
CRS was founded in 1994 to respond to the request for assistance and IT support from professional firms and SMEs. Assistance is almost always tailor made and, thanks to the strategic approach, we operate with the aim of optimizing every investment or technological choice in the long term. Our staff, constantly updated, works with passion and attention to detail to bring innovative solutions to customers, experimenting with consolidated, emerging technologies or even hypothesizing new scenarios.
We take care of operation and security of our clients. Focused on high level partnership with major player on the market. We are a team of 40 passionate and close-knit people who work together and alongside client companies to solve problems by flexibly and creatively improving their efficiency and productivity. IT solutions and assistance with remote and onsite services in real time.
TIQ Time helps lawyers build a complete and consistent timesheet, helping firms to reduce leakage, increase their bottom-line and optimise insights and transparency in service delivery.
I’ve been involved with the design, development and management of TIQ Time since day one. My activities for TIQ Time include:
Want to read more? Check out all related posts under legal tech.
The leading Nordic law firm Thommessen has implemented best-of-breed time registration software TIQ Time. The software is used by all lawyers and staff across the firm’s offices in Oslo, Stavanger, Bergen, and London.
TIQ is pleased to announce that Thommessen implemented TIQ’s time registration software firm wide. 300 of Thommessen’s lawyers and staff adopted TIQ Time when the firm updated its existing ERP to include more specialised and more modern tools.
Trine Melsether, Chief Digital Officer at Thommessen:
Time tracking is at the core of the legal business model. You don’t want your lawyers to spend a lot of time tracking their billable hours, you want them to spend it adding value for clients. From the first moment, our lawyers were very engaged with TIQ Time, and understood the value the service would deliver. The fact that TIQ is focused fully on the legal market creates trust and made it a safe choice for our firm.
The firm’s previous solution - a timesheet native to the ERP system - lacked certain functionality, causing frustration among the lawyers. TIQ’s time capture service alleviates these frustrations. Its interface is easy-to-use and offers modern time recording features, including fully automated time capture alongside manual timers. The software is supported on desktop and mobile devices. In this case, TIQ Time was rolled out on top of the ERP installation and iManage Worksite.
Nick Schils, CEO at TIQ Time:
One of the promises we make our customers is that we never charge consulting fees when it comes to onboarding, integration and implementation. We believe that as a true Software-as-a- Service company, an effortless roll-out and adoption should be part of the core of the product. Over the years, this philosophy has translated to a sophisticated approach where TIQ Time can be adopted by leading firms, such as Thommessen, within days.
Trine Melsether, CDO:
Our challenge was that we were switching our ERP system, which meant that we had to roll out TIQ Time to all users at once. On Friday our lawyers were working with the previous solution, and on Monday everybody started using TIQ Time. The transition was amazingly smooth, and worked from day one.
Thommessen is one of Norway’s leading commercial law firms, with offices in Oslo, Bergen, Stavanger and London. Since its foundation in 1856, the firm has been closely involved in most of the defining developments in Norwegian industry and commerce. Thommessen’s clients are Norwegian and international businesses, in both the private and public sector. The firm assists businesses with transactions, complex projects, and dispute resolution in all commercial law disciplines. Several of Thommessen’s lawyers are leading experts in their field in Norway, and a number of them are admitted to the Supreme Court.
TIQ Time helps lawyers build a complete and consistent timesheet, helping firms to reduce leakage, increase their bottom-line and optimise insights and transparency in service delivery.
I’ve been involved with the design, development and management of TIQ Time since day one. My activities for TIQ Time include:
Want to read more? Check out all related posts under legal tech.
TIQ has announced that Portolano Cavallo, the leading digital-tech and Life Sciences Italian law firm, selected TIQ Time to improve time registration. All fee earners are live on TIQ’s best-of-breed time tracking solution to fill out their timesheets.
TIQ Time helps Portolano Cavallo’s fee-earners construct high quality and consistent narratives for all time entries by using smart suggestions based on captured activities. The software automatically creates an overview of the time that lawyers spent on documents, emails, meetings and other activities. The use of narrative templates, both for captured entries and manual entries, will improve the quality of time entries with less effort than before. The full implemention is deliverd by CRS IT Consulting & Management.
Yan Pecoraro, Leading Partner at Portolano:
We have never considered time entry a nuisance: instead, we have always striven to maximum accuracy to ensure full transparency about our work to clients, and to appropriately communicate added value. TIQ Time maximizes our ability to do so, facilitating real- time entries and accurate narratives.
TIQ Time helps lawyers build a complete and consistent timesheet, helping firms to reduce leakage, increase their bottom-line and optimise insights and transparency in service delivery.
I’ve been involved with the design, development and management of TIQ Time since day one. My activities for TIQ Time include:
Want to read more? Check out all related posts under legal tech.
As usual, let’s start with a picture and description of the end product.
Multifunctional wall covering is a printable polyester wall covering material material that can be applied horizontally. It’s supplied in a roll that covers the wall from floor to ceiling in a single piece for walls up to 12 meters in length.
Apart from being seamless and printable, it has acoustic properties, meaning that it can improve and environments acoustics by eliminating echo. This is especially useful for open office environments that usually contain a lot of hard materials. Instead of investing in acoustic treatment, covering one or two walls with this material will drastically improve the acoustic climate of the office due to its large surface area - and at a competitive price and without sacrificing office space!
A full list of the material properties:
For this project I was asked to participate by dQconcepts B.V., with whom I’ve worked in the past on Mixblocks - Musical building blocks on the iPhone and SAM: 100% recycled bird feeder. dQconcepts shared the idea for this project and together we’ve solved the main puzzle: finding the right combination of materials to create an end product that:
As you can imagine, this makes the project considerably more difficult than just buying off-the-shelf materials. Unfortunately I cannot share any technical details about how we have managed to solve this puzzle due to the competitive position of the product.
Parallel to the sourcing the materials and exploring methods to produce the wall covering, dQconcepts B.V. has started a patent application and the product has been patented in multiple geographic regions, including the European Union and USA.
This project is patented innovative material, but we do not intend to start a printing business. The first licensed vendor and producer of the base material is Dutch company Probo B.V. They sell the Multifunctional Wall Covering to their resellers under the name MultiTexPro®. Check out their website if you’re interested!
Let’s start with some pictures of the end result:
The design process proved to be a lot more difficult than the previous bird feeders we’ve done together with Singing Friend, particularly because the size and weight of the peanut butter jars that are inserted into the feeder. Studio OSO managed to design it in such a way that it retains the signature visual style of the SAM and ANNA feeders while keeping material usage to a minimum.
If you’re interested in the technical side of these projects, I would suggest having a look at my previous post about the SAM, in which I’ve provided more in-depth information about the recycled material and the product development process. You can find it here: SAM: 100% recycled bird feeder.
The customer, SingingFriend, has put a lot of effort into making their product offering more sustainable. As a result, all the recycled bird feeders are actively endorsed by the WWF as a sustainable choice! You can check out the products here:
If you have existing posts in Markdown, this script should work right away:
mkdir $(basename -a -s .md ./*.md)
If your files have a different extension, change .md to match the extension you’re using and it should work.
]]>After playing around with the Hexo API, I found this solution to get all posts from a category, in this case the page category:
<%# template.ejs %><% var posts = site.categories.data.find( function(category) { return category.name === page.category }) .posts.sort('date').reverse()%><%# and then somewhere else in the template.. %><% posts.forEach(function(post) { %> <%# your post here %><% }) %>
]]>By default, Hexo ignores a custom homepage if you place it in /source/index.md
. By default, you can add a page as a partial but that’s not a very elegant way to solve the issue.
If you’re using Hexo 3 like I do, you can solve this by removing the hexo-generator-index package. By default this package creates an archive of posts as a home page, but that’s not what we want. It can be removed by running:
npm remove hexo-generator-index
You can now put your index page in /source/index.md
.
Don’t forget to set the layout in the front matter:
---layout: pagetitle: homepagedate: 2020-10-17---
In this post I will summarize the steps taken to convert the Jekyll codebase to Hexo.
I don’t want to take too much of your time with this. Basically I’m way more comfortable with Javascript than I am with Ruby. Hexo is written in Javascript, so it feels more natural to me than Jekyll (which is written in Ruby).
From all the Javascript based options available, Hexo has everything I need included in the default package so I don’t need to modify too much, depend on plugins or use very powerful frameworks for a simple blog (yes Gatsby, that’s you).
Prerequisites
For this post I’m assuming you have Node.js
and npm
installed already.
Now open a shell where you want to create your new Hexo project and follow along:
# Install the Hexo CLInpm install -g hexo-cli# Initate a new Hexo project in the ./hexo-site folderhexo init hexo-site
After this, open the hexo-site
folder in your favourite editor.
I found I had to modify these settings to match the settings of my Jekyll setup. The post_asset_folder
setting helps to organise post images etc., which I found was missing in Jekyll.
Edit _config.yml
and have a look at your general settings, paying attention to the specific settings below to closely mimic Jekyll:
permalink: :category/:title/new_post_name: :year/:year-:month-:day-:title.mdpretty_urls: trailing_index: false # Set to false to remove trailing 'index.html' from permalinks trailing_html: false # Set to false to remove trailing '.html' from permalinkspost_asset_folder: true # optionalpagination_dir: .category_dir: /
This step is straighforward, just move the /_posts
folder in Jekyll to /source/_posts
in the Hexo folder.
If you have enabled the optional post_asset_folder
setting in the config file, Hexo expects each post file to be accompanied by a folder that matches the filename (e.g. post /_posts/my-first-post.md
has matching folder /_posts/my-first-post/
.
To create the matching folders automatically, have a look at my separate post here: Automatically create Hexo asset folders for existing posts
You can try to run the command hexo server
now. If you’re migrating from a ver simple Jekyll setup, it might actually work. In my case however, I had to convert a number of posts to be compatible with Hexo. This was mostly because I’ve used Liquid template tags like {% highlight %}
or {% include %}
in my posts. Liquid does not work in Hexo by default.
For the conversion, almost all problems could easily be resolved by using the correct Hexo Helper for the problem. Once I discovered this, the conversion went pretty smooth and I only had to write 1 custom Hexo Helper to get my posts.
At this point, your posts should work but the output from hexo server
probably doesn’t look like your previous blog at all. That’s because the Jekyll templates have to be migrated and converted.
Create a new folder in the /themes
folder with a name of your choice. I would recommend to have a look at the default template that’s in the folder and try to match the default template structure at first. The default Hexo folder structure allows you to neatly organise your files and it’s one of the things I like about Hexo.
Hexo uses EJS templates for its templates by default. This isn’t what Jekyll uses, so they need to be converted.
I can’t really help you here, but studying the default template in the /themes
folder and basic EJS knowledge was enough for me to get this done.
By default Hexo comes with a few settings I didn’t really like. I’ve created separate posts for this, I’ve listed them below at the end of this post.
For this I’m assuming you’re using Sass SCSS for your styles.
Move your styles to /themes/[your-theme]/source/_scss/
Next, make sure you have the Hexo SCSS renderer installed. If not, run:
npm install --save hexo-renderer-scss
This should generate the styles for you in the public/css
folder when rendering with the hexo generate
command.
You can reference the CSS files in your templates like this using the CSS Helper function:
<%- css('css/style') %>
This step is pretty straightforward. Move your JavaScript files to /themes/[your-theme]/source/js
and they will be rendered to /public/js
. You can use the JS Helper function to reference the JavaScripts in your templates:
<%- js('js/script.js') %>
Any folder created in the /source
directory that is not prefixed with an underscore (_) character, gets copied to the /public
folder when rendering. So your favicon.ico
file can be put directly inside the /source
folder. You can also create subfolders to organise your assets a bit more (recommended).
As for post assets (e.g. images) that get referenced in the posts, you can either create a separate folder or use the post_assets_folder
option mentioned in Step 2. If you’ve configure the post assets folder, put all post assets in their corresponding folders in the /source/_posts
folder.
You should now have a fully functional Hexo blog. To keep this post simple and readable, I haven’t covered the more advanced topics yet.
I will write additional posts on more advanced topics in the near future and will directly link them here for your convenience.
Template Customization
]]>Since Docker Compose is in “Public Preview Azure, it’s a bit more difficult to assert whether you’ve made a mistake or ran into a limitation of the Preview. You can read more about the limitation of the Preview before going down this road. Pay special attention to the fine print on this page:
“Any other options not explicitly called out are ignored in Public Preview”
Consider yourself warned.
Although Microsoft starts with the S1 App Service Plan for Wordpress, the memory consumption was a bit too high for my taste (usually 40-50% on an inactive state). I can recommend using the P1V2 instance for Craft CMS, which offers twice the RAM in the same price range.
I can recommend having a look at the urbantrout/craftcms image. What I like about it, is the clean separation of services. I’ve learned a lot from this Docker image, but finally decided to build my own due to custom needs.
Note: the sample Docker Compose configuration will not work out of the box on Azure, because it uses the volumes_from option which is unsupported in the Azure Public Preview. See “Issue #2” below for a workaround.
For running a database, there are two options:
It’s usually not recommended to run a database in a container for production environments.
However you set up your database, it’s always a good plan to have a backup. I also wanted to keep a backup of all the assets that get uploaded using the Control Panel.
Azure allows you to mount a File Share on a Docker container (Settings > Configuration > Path Mappings).
For example, if your volume is named craft_backups:
# docker-compose.yml# ... volumes: - craft_backups:/backups environment: - BACKUP_INTERVAL: 21600 # in seconds# ...
Now the File Share contents are available under the /backups path, you can use them for making backups. After spending some time trying out both, I’ve settled with some simple backup/restore shell scripts.
Call these scripts when starting your container:
# /scripts/startup.shrestore() { /scripts/restore.sh}backup() { while true do sleep $BACKUP_INTERVAL /scripts/backup.sh & done}
The backup script, called every xx seconds (as set in the BACKUP_INTERVAL environment variable):
# /scripts/backup.sh#!/bin/bashwebroot='/var/www/html'# Periodic backup of database + assets to /backups$webroot/craft backup/db \&& cp -r $webroot/storage/backups/*.sql /backups/database \&& cp -r $webroot/web/YOUR_ASSETS /backups/assets
The restore script, called once during the container startup:
# /scripts/restore.sh#!/bin/bashset -x -ewebroot='/var/www/html'backup_dir="/var/www/html/storage/backups"backup_file=$(ls /backups/database -t | grep ^YOUR_CRAFT_SITE_NAME_.*\.sql$ | head -n 1)if [ ! -d $backup_dir ]; then mkdir -p $backup_dirficp /backups/database/$backup_file $backup_dir/$backup_filecp -r /backups/assets/YOUR_ASSETS $webroot/web
Uploading and updating the Docker Compose file from the Azure interface isn’t the best experience. Sometimes it’s slow or unresponsive. Increase your productivity by using the Azure CLI. I’ve created a shell script to make it easier to run frequently used Azure commands during development:
# azure.sh#!/usr/bin/env bashset -x -ecase $1 in update) az webapp config container set --resource-group RESOURCE_GROUP_NAME --name RESOURCE_NAME --multicontainer-config-type compose --multicontainer-config-file docker-compose.yml ;; tail) az webapp log tail --resource-group RESOURCE_GROUP_NAME --name RESOURCE_NAME ;; start) az webapp start --resource-group RESOURCE_GROUP_NAME --name RESOURCE_NAME ;; stop) az webapp stop --resource-group RESOURCE_GROUP_NAME --name RESOURCE_NAME ;; *) echo "Please provide a command" ;;esac
The Nginx container needs access to the static assets that reside in the webroot of the Craft CMS container. Instead of using the volumes_from option, this can also be achieved with a shared volume between the containers:
# docker-compose.ymlservices: nginx: depends_on: - craft volumes: - web:/var/www/html/web ... craft: volumes: - web:/var/www/html/web ...volumes: web:
Hopefully this will speed up your time getting started with Docker Compose on Azure!
Microsoft.AspNetCore.SpaServices
Nuget package. In August 2019 Microsoft announced that it would be deprecating this package and suggested a new integration mechanism with Microsoft.AspNetCore.SpaServices.Extensions
.Since I use this with Vue.js and the new integration mechanism doesn’t offer the same functionality, I’ll share how I managed to get up and running again in this post.
In this announcement, Microsoft made the official statement:
[Announcement] Obsoleting Microsoft.AspNetCore.SpaServices and Microsoft.AspNetCore.NodeServices
As you can see, there’s still an active discussion after a year, mainly because Microsoft suggests to migrate to a new integration mechanism that lacks a lot of functionality.
Let me start by stating this isn’t the ideal solution, but it works (Hot Module Replacement too).
It consists of a few steps:
In the rest of the article I’m assuming you have a basic working setup and knowledge of the technologies we’re working with. I’ve replaced irrelevant code with “…” to increate readability.
This step is pretty straightforward. update Startup.cs to include this:
using Microsoft.AspNetCore.SpaServices.ReactDevelopmentServer;...public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {... if (env.IsDevelopment()) { // run webpack-dev-server for development builds using build:hotdev NPM script // NPM commands are defined in package.json app.Map("/dist", innerApp => { innerApp.UseSpa(spa => { spa.Options.SourcePath = "."; spa.UseReactDevelopmentServer(npmScript: "build:hotdev"); }); }); }...
What this code does, is call the NPM script buid:hotdev
. If you’re using Vue.js, don’t worry about the React reference. It’s still just a piece of code that calls the NPM script.
This should look familiar:
"scripts": { // ... "build:hotdev": "npx webpack-dev-server --open --hot --mode development", "build:live": "npx webpack --display-error-details --mode production --env.prod" // ...}
Install the dependencies:
npm install --save-dev webpack-dev-server html-webpack-plugin html-webpack-harddisk-plugin
And update your Webpack configuration to look something like this:
// webpack.config.js// ...const HtmlWebpackPlugin = require('html-webpack-plugin')var HtmlWebpackHarddiskPlugin = require('html-webpack-harddisk-plugin')module.exports = (env) => { const isDevBuild = !(env && env.prod) if (isDevBuild) { // don't remove - next line tricks Microsoft.AspNetCore.SpaServices.ReactDevelopmentServer into executing console.log('Starting the development server...\n') } else { console.log('Running production build...\n') } // ... return [{ // ... devServer: { contentBase: path.join(__dirname, './wwwroot/dist'), compress: true, overlay: true, port: 5001, proxy: { '/': 'http://localhost:5000' } }, // ... plugins: [ // ... new HtmlWebpackPlugin({ inject: false, template: 'Views/_HtmlWebpackTemplate.cshtml', filename: '../../Views/Home/Index.cshtml', alwaysWriteToDisk: true, minify: false }), new HtmlWebpackHarddiskPlugin({ // Enhances html-webpack-plugin functionality by adding the {alwaysWriteToDisk: true|false} option. outputPath: path.resolve(__dirname, 'wwwroot/dist/') }) ] }]}
Important: pay close attention to console.log('Starting the development server...\n')
. This is the main hack that makes this method work (source).
This code starts webpack-dev-server
on port 5001
. If you’re not using the default port (5000), please update this section. It also makes sure your cshtml templates get updated with the assets injected by the development server.
To make sure the cached result gets updated and recognised by .NET Core,html-webpack-harddisk-plugin
is used. The exact configuration of the templates is out of the scope of this writeup, but feel free to get in touch if you need help!
webpack-dev-server
is nice for development, but what about production builds? The .csproj file needs to be modified for this.
YourProject.csproj:
<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish"> <!-- As part of publishing, ensure the JS resources are freshly built in production mode --><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>Exec</span> <span class="token attr-name">Command</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>npm install<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>Exec</span> <span class="token attr-name">Command</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>npm run build:live<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span><span class="token comment"><!-- Include the newly-built files in the publish output --></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>ItemGroup</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>DistFiles</span> <span class="token attr-name">Include</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>wwwroot\dist\**<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>ResolvedFileToPublish</span> <span class="token attr-name">Include</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>@(DistFiles-><span class="token punctuation">'</span>%(FullPath)<span class="token punctuation">'</span>)<span class="token punctuation">"</span></span> <span class="token attr-name">Exclude</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>@(ResolvedFileToPublish)<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>RelativePath</span><span class="token punctuation">></span></span>%(DistFiles.Identity)<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>RelativePath</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>CopyToPublishDirectory</span><span class="token punctuation">></span></span>PreserveNewest<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>CopyToPublishDirectory</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>ResolvedFileToPublish</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>ItemGroup</span><span class="token punctuation">></span></span>
</Target>
:hexoPostRenderEscape–>Unfortunately, the console.log()
hack in step 3. is a one-way process, meaning the webpack-dev-server will keep running until you close it manually. This means you can have conflicting servers running at the same time.
To resolve this, I’ve added a small script that gets run before the Build step. This is compatible with both Windows and Mac/Linux setups:
<Target Name="KillRunningNodeServer" BeforeTargets="Build"> <Message Importance="high" Text="Killing old Node server..." /> <Exec Command="taskkill /f /im node.exe" ContinueOnError="true" Condition="'$(OS)' == 'Windows_NT'" /> <Exec Command="killall node" ContinueOnError="true" Condition="'$(OS)' == 'Unix'" /></Target>
Hopefull this will save you a couple of hours of puzzling and testing!
Turns out the open source font editor FontForge is able to do exactly what we want (and more).
For this task it wasn’t my interest to learn how to use a new application, so I installed the command-line tool via Homebrew:
brew install fontforge
Then, we can use FontForge to extract the glyphs from the font and save them as SVG images using the following command:
# e.g. for a font file named "font.ttf"fontforge -lang=ff -c 'Open($1); SelectWorthOutputting(); foreach Export("svg"); endloop;' font.ttf
Caution: this writes the images in the same directory as the font is located in, you might want to place it in a separate folder.
This post is a writeup about the goals, results and considerations that went into the redesign of the TIQ marketing website in 2020.
Note: this is the second writeup about the TIQ marketing website. In case you’re interested where we’re coming from, the previous version of the marketing website has been documented in my previous writeup.
The homepage of the new TIQ marketing website
Customer testimonials have a prominent place on the homepage, right under the fold. It features a custom built slider in pure Javascript.
TIQ’s features are explained in a slideshow, again in a custom slider. All slides link to additional information to optimize clickthrough rates.
The blog has been integrated into the main website and the old posts have been migrated. It’s designed as a “reader view” with the focus on clean, readable typography suitable for longer texts.
Downloadable resources are a big part of our marketing campaigns and have a clear location on the new website.
Download page for a selected resource.
The redesigned demo request form.
As I explained earlier, we decided to implement a CMS after 5 years. Now, I have plenty of experience with Wordpress and I’m not a fan. Wordpress has grown from a blog platform to a platform that does it all. But under the hood it’s still a blog platform first. In the past I usually ended up spending way too much time hacking Wordpress to get what I want. It was time to try something different.
After extensive searching, I stumbled upon Craft CMS. This offers exactly what I couldn’t get in Wordpress:
I’ve set Craft CMS up as a Docker container running on Azure with automated backups and thus far it’s holding up really well.
Update: I’ve written a blog post about Running Craft CMS in a Docker container on Microsoft Azure.
As part of the new website, we have also taken a good critical look at alternatives for user insights. I’ve written a separate article about this: Lessons learned: upgrading visitor privacy with Matomo Analytics.
Amsterdam and Helsinki, 6 April 2020. TIQ has announced that Roschier is now working firm-wide with TIQ Time to improve its time registration. Approximately 500 staff members, of which more than 300 lawyers and practitioners, use TIQ Time as time entry solution.
Jan Willamo, Chief Digital Officer at Roschier:
One of the main drivers to select TIQ’s best-of-breed solution was related to the uncomplicated implementation process. TIQ Time was implemented quickly without affecting our existing practice management system. Since then, time tracking has become a lot easier for our fee earners.
The firm’s previous solution, a custom timesheet as part of the ERP system, had some shortcomings Roschier wanted to address in this project. The speed of the old application and the lack of mobile time entry capabilities caused frustration among the lawyers. The time capture functionality of TIQ Time, combined with the multilingual NarrativeBuilder, helps lawyers to construct better timesheets with less effort than before. This allows them to spend more time where it matters most, on their business and clients.
Jan Willamo, Chief Digital Officer at Roschier:
The system has now been fully rolled-out to all fee-earners within the firm. So far, we have been hearing positive feedback from both the lawyers and the support staff. Time registration is now much more simplified, so our employees can focus on work that matters most.
TIQ Time offers a range of time recording features, from fully automated to manual timers, supported both on desktop and mobile devices. The narrative builder ensures consistent, high-quality narratives for every time entry by capturing time spent on documents, emails, meeting, phone calls and more. Deployed as an extension to their ERP and DMS system, the software helps Roschier employees making time registration less complicated and time consuming.
Nick Schils, CEO at TIQ:
Gaining insights into service delivery starts with taking away any friction around time entry. We are very proud to be part of Roschier’s overall IT strategy, in which they chose to implement TIQ Time ahead of the ERP migration. The result is a future-proof, accurate and more efficient way of tracking time that fits the innovative character of the firm.
The integration with the ERP and DMS system is set up with Custodian, a dedicated integration platform as a service (iPaaS) custom-built for Nordic Professional Services Companies. The implementation is delivered by PSA Consulting, one of TIQ’s implementation partners.
Roschier is one of the leading law firms in the Nordic region with offices in Helsinki and Stockholm. The firm is well-known for its excellent track record of advising on demanding international business law assignments and large-scale transactions.
TIQ Time helps lawyers build a complete and consistent timesheet, helping firms to reduce leakage, increase their bottom-line and optimise insights and transparency in service delivery.
I’ve been involved with the design, development and management of TIQ Time since day one. My activities for TIQ Time include:
Want to read more? Check out all related posts under legal tech.
That being said, Google Analytics comes with a hidden cost. Google Analytics has become ubiquitous and with that, so has Google surveillance.
For a long time, it was hard to find a good alternative to Google Analytics. But now, Matomo Analytics (formerly Piwik) deserves your serious consideration if you value your visitor’s privacy (and your own).
Note: I’m not affiliated with- or paid by any of the companies discussed in this article (Matomo & Google).
In June 2020, Google Analytics is (BuiltWith, 2020):
This means that all these pages let Google know you’re visiting it. And this not only applies websites. Google Analytics can also be found in mobile applications, emails, video games, desktop applications and Internet Of Things devices (source).
In the European Union, GDPR has been implemented to protect the personal data and free movement of such data. Whether you agree with the risk of market dominance in this scenario, European law now more responsibility with regards to personal data.
If you value your visitors, the least you can do is try to provide them with a safe space. If they are paying for your product, it’s your duty.
Don’t just implement a tool, think about it for a minute:
Basically the implementation of Matomo Analytics is very similar to Google Analytics. In both cases it’s done with a single line of code in your website or application. The only difference is that there’s two options for Matomo: 1) a self-hosted installation or 2) a Matomo Cloud installation. I would suggest to use the self-hosted option to have full control and ownership of the collected data.
Matomo is the best alternative to Google Analytics I’ve tried thus far and I would recommend it if you take privacy seriously. Although there are definitely differences with Google Analytics, Matomo Analytics works just as fine, or even better, to gain the insights needed from a marketing and business perspective. I’m sure the avid Google Analytics user will need some time to get used to Matomo, but the degree of customisation possible with Matomo is unparalleled.
In practice I’ve seen that having hard evidence that no data leaves your servers drastically reduces customer concerns about data processing (not only in the European Union). Even if it’s just on your marketing website, using Matomo will leave a great first impression!
brew install imagemagick
).convert -density 384 icon.svg -define icon:auto-resize icon.ico
and change icon.svg and icon.ico to the desired filenames.The ICO format is an odd beast, it stores multiple images with different sizes in the same file. To check if everyting was converted correctly, run:
identify icon.ico
This should output something similar to this:
icon.ico[0] ICO 256x256 256x256+0+0 8-bit sRGB 0.010u 0:00.006icon.ico[1] ICO 192x192 192x192+0+0 8-bit sRGB 0.000u 0:00.004icon.ico[2] ICO 128x128 128x128+0+0 8-bit sRGB 0.000u 0:00.002icon.ico[3] ICO 96x96 96x96+0+0 8-bit sRGB 0.000u 0:00.002icon.ico[4] ICO 64x64 64x64+0+0 8-bit sRGB 0.000u 0:00.001icon.ico[5] ICO 48x48 48x48+0+0 8-bit sRGB 0.000u 0:00.001icon.ico[6] ICO 40x40 40x40+0+0 8-bit sRGB 0.000u 0:00.001icon.ico[7] ICO 32x32 32x32+0+0 8-bit sRGB 0.000u 0:00.001icon.ico[8] ICO 24x24 24x24+0+0 8-bit sRGB 0.000u 0:00.001icon.ico[9] ICO 16x16 16x16+0+0 8-bit sRGB 569494B 0.000u 0:00.001
This should give you a high quality desktop icon.